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?
XDS
Punkte
3083
Ich habe die elegantesten Ansätze für diese Hilfsmethode zusammengefügt:
public static class Ux {
public static decimal ToUnixTimestampSecs(this DateTime date) => ToUnixTimestampTicks(date) / (decimal) TimeSpan.TicksPerSecond;
public static long ToUnixTimestampTicks(this DateTime date) => date.ToUniversalTime().Ticks - UnixEpochTicks;
private static readonly long UnixEpochTicks = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc).Ticks;
}
Gaurav Sharma
Punkte
21
Timur Lemeshko
Punkte
2547
Es gibt ein ToUnixTimeMilliseconds für DateTimeOffset in System
Sie können eine ähnliche Methode für DateTime schreiben:
public static long ToUnixTimeSeconds(this DateTime value)
{
return value.Ticks / 10000000L - 62135596800L;
}
10000000L - Umrechnung von Ticks in Sekunden
62135596800L - Umrechnung von 01.01.01 in 01.01.1978
Es gibt kein Problem mit Utc und Lecks
Bruce Cameron
Punkte
9
Ich habe das nach langem Bemühen verwendet, es berücksichtigt auch den Zeitzonenoffset:
public double Convert_DatTime_To_UNIXDATETIME(DateTime dt)
{
System.DateTime from_date = new DateTime(1970, 1, 1, 0, 0, 0, 0, System.DateTimeKind.Utc);
double unix_time_since = dt.Subtract(from_date).TotalMilliseconds;
TimeSpan ts_offset = TimeZoneInfo.Local.GetUtcOffset(DateTime.UtcNow);
double offset = ts_offset.TotalMilliseconds;
return unix_time_since - offset;
}
Nicht registrierter Benutzer
Punkte
0