670 Stimmen

Wie man den Unix-Zeitstempel in C# bekommt

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.

2voto

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;
}

2voto

Gaurav Sharma Punkte 21

Ich denke, dass es besser funktionieren würde, den Unix-Zeitstempel von einem DateTime-Objekt zu erhalten. Ich benutze .net Core 3.1.

    DateTime foo = DateTime.Now;
    long unixTime = ((DateTimeOffset)foo ).ToUnixTimeMilliseconds();

1voto

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

0voto

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;
    }

0voto

Wenn Sie einen UTC-Zeitstempel als long im Tick-Format haben, gibt es einen noch schnelleren Shortcut dafür.

        /// 
        /// Wandelt Ticks in Unix-Zeitstempel um
        /// 
        /// 
        /// 
        public static long ToUnixTimestamp(long time)
        {
            return (time - 621355968000000000) / TimeSpan.TicksPerMillisecond;
        }

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X