Como obter o timestamp correto em c #


146

Gostaria de obter um carimbo de data / hora válido no meu aplicativo, então escrevi:

public static String GetTimestamp(DateTime value)
{
    return value.ToString("yyyyMMddHHmmssffff");
}
//  ...later on in the code
String timeStamp = GetTimestamp(new DateTime());
Console.WriteLine(timeStamp);

resultado:

000101010000000000

Eu queria algo como:

20140112180244

O que eu fiz errado?

Respostas:


192

Seu erro está em uso new DateTime(), que retorna 1 de janeiro de 0001 às 00: 00: 00.000 em vez da data e hora atuais. A sintaxe correta para obter a data e hora atuais é DateTime.Now , então altere isso:

String timeStamp = GetTimestamp(new DateTime());

para isso:

String timeStamp = GetTimestamp(DateTime.Now);

Qual é o contrário? de timestamp para datetime
DanielV 15/06

2
@ DanielV veja aqui: Convertendo uma String para DateTime .
ekad

2
double timestamp = 1498122000; DateTime fecha = new DateTime(1970, 1, 1, 0, 0, 0, 0, System.DateTimeKind.Utc).AddSeconds(timestamp); extraído de aqui
DanielV


16
var timestamp = DateTime.Now.ToFileTime();

//output: 132260149842749745

Essa é uma maneira alternativa de individuar transações distintas. Não é hora unix, mas o Windows Filetime.

Dos documentos :

A Windows file time is a 64-bit value that represents the number of 100- 
nanosecond intervals that have elapsed since 12:00 midnight, January 1, 1601 
A.D. (C.E.) Coordinated Universal Time (UTC).

2
Seria útil se você incluísse alguma explicação sobre por que sua resposta de código é melhor que as outras, para que outros usuários entendam por que usar sua solução para esse problema. As respostas somente de código não são tão úteis sem uma explicação.
Brian Tompsett -

3
Ajuda-me a obter facilmente um estilo de carimbo de data e hora para invalidar o cache. +1
Adavo

2
Int32 unixTimestamp = (Int32)(TIME.Subtract(new DateTime(1970, 1, 1))).TotalSeconds;

"TIME" é o objeto DateTime para o qual você deseja obter o registro de data e hora do unix.


1

Para UTC :

string unixTimestamp = Convert.ToString((int)DateTime.UtcNow.Subtract(new DateTime(1970, 1, 1)).TotalSeconds);

Para sistema local :

string unixTimestamp = Convert.ToString((int)DateTime.Now.Subtract(new DateTime(1970, 1, 1)).TotalSeconds);
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.