Jak uzyskać poprawny znacznik czasu w C #

146

Chciałbym uzyskać prawidłowy znacznik czasu w mojej aplikacji, więc napisałem:

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

wynik:

000101010000000000

Chciałem coś takiego:

20140112180244

Co zrobiłem źle?

Wojciech Kętrzyński
źródło

Odpowiedzi:

192

Twoim błędem jest użycie new DateTime(), które zwraca 1 stycznia 0001 o 00:00: 00.000 zamiast bieżącej daty i godziny. Prawidłowa składnia, aby uzyskać aktualną datę i godzinę, to DateTime.Teraz zmień to:

String timeStamp = GetTimestamp(new DateTime());

do tego:

String timeStamp = GetTimestamp(DateTime.Now);
ekad
źródło
A co na odwrót? od znacznika czasu do
daty i godziny
2
@DanielV patrz tutaj: Konwersja ciągu na DateTime .
ekad
2
double timestamp = 1498122000; DateTime fecha = new DateTime(1970, 1, 1, 0, 0, 0, 0, System.DateTimeKind.Utc).AddSeconds(timestamp); wyodrębniony stąd
DanielV
44
var Timestamp = new DateTimeOffset(DateTime.UtcNow).ToUnixTimeSeconds();
Mohamed Abdo
źródło
11
Wymaga NET 4.6.
jeromej
7
To była odpowiedź dla mnie, ale użyłemToUnixTimeMilliseconds()
Yass,
15
var timestamp = DateTime.Now.ToFileTime();

//output: 132260149842749745

Jest to alternatywny sposób wyodrębniania odrębnych transakcji. To nie jest czas uniksowy, ale czas plików systemu Windows.

Z dokumentów :

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).
Jeff
źródło
2
Byłoby pomocne, gdybyś dodał wyjaśnienie, dlaczego odpowiedź w Twoim kodzie jest lepsza niż inne, aby inni użytkownicy zrozumieli, dlaczego warto skorzystać z rozwiązania tego problemu. Tylko kod odpowiedzi nie są tak pomocne bez wyjaśnienia.
Brian Tompsett - 汤 莱恩
3
Pomaga mi łatwo uzyskać styl znacznika czasu, aby unieważnić pamięć podręczną. +1
Adavo
2
Int32 unixTimestamp = (Int32)(TIME.Subtract(new DateTime(1970, 1, 1))).TotalSeconds;

„TIME” to obiekt DateTime, dla którego chcesz uzyskać uniksowy znacznik czasu.

sachin
źródło
0

W przypadku UTC :

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

W przypadku systemu lokalnego :

string unixTimestamp = Convert.ToString((int)DateTime.Now.Subtract(new DateTime(1970, 1, 1)).TotalSeconds);
Yousha Aleayoub
źródło