Ich habe mich auf Stack Overflow umgesehen und auch einige der vorgeschlagenen Fragen angeschaut, aber keine scheint zu beantworten, wie man einen Unix-Zeitstempel in C# bekommt.
Antworten
Zu viele Anzeigen?Ab .NET 4.6 gibt es DateTimeOffset.ToUnixTimeSeconds
.
Dies ist eine Instanzmethode, daher wird erwartet, dass Sie sie auf einer Instanz von DateTimeOffset
aufrufen. Sie können auch jede Instanz von DateTime
umwandeln, obwohl Vorsicht vor der Zeitzone. Um den aktuellen Zeitstempel zu erhalten:
DateTimeOffset.UtcNow.ToUnixTimeSeconds()
Um den Zeitstempel von einem DateTime
zu erhalten:
DateTime currentTime = DateTime.UtcNow;
long unixTime = ((DateTimeOffset)currentTime).ToUnixTimeSeconds();
Sie erhalten einen Unix-Zeitstempel in C#, indem Sie DateTime.UtcNow
verwenden und die Epoch-Zeit von 1970-01-01 abziehen.
z.B.
Int32 unixTimestamp = (int)DateTime.UtcNow.Subtract(new DateTime(1970, 1, 1)).TotalSeconds;
DateTime.UtcNow
kann durch ein beliebiges DateTime
-Objekt ersetzt werden, für das Sie den Unix-Zeitstempel erhalten möchten.
Es gibt auch ein Feld mit dem Namen DateTime.UnixEpoch
, das von MSFT sehr schlecht dokumentiert ist, aber als Ersatz für new DateTime(1970, 1, 1)
dienen kann.
Sie können auch Ticks verwenden. Ich kodiere für Windows Mobile, daher habe ich nicht den vollen Satz von Methoden. TotalSeconds steht mir nicht zur Verfügung.
long epochTicks = new DateTime(1970, 1, 1).Ticks;
long unixTime = ((DateTime.UtcNow.Ticks - epochTicks) / TimeSpan.TicksPerSecond);
oder
TimeSpan epochTicks = new TimeSpan(new DateTime(1970, 1, 1).Ticks);
TimeSpan unixTicks = new TimeSpan(DateTime.UtcNow.Ticks) - epochTicks;
double unixTime = unixTicks.TotalSeconds;
Mit .NET 6.0 und der Verwendung von long
um das 2038
Problem zu vermeiden:
Von DateTime.UtcNow zu UnixTime
long Sekunden = (long)DateTime.UtcNow.Subtract(DateTime.UnixEpoch).TotalSeconds;
Sekunden
wird die Sekunden seit 01.01.1970 enthalten (UnixTime)
Von UnixTime zu DateTime.UtcNow
DateTime Zeitstempel = DateTime.UnixEpoch.AddSeconds(Sekunden);
Fiddle: https://dotnetfiddle.net/xNhO6q
- See previous answers
- Weitere Antworten anzeigen