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.