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.

1001voto

Bob Punkte 13881

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();

737voto

bizzehdee Punkte 19155

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.

55voto

Dave Hindle Punkte 537

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;

41voto

Leandro Bardelli Punkte 8293

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

34voto

Bartłomiej Mucha Punkte 2732

Das ist was ich benutze:

public long UnixTimeNow()
{
    var timeSpan = (DateTime.UtcNow - new DateTime(1970, 1, 1, 0, 0, 0));
    return (long)timeSpan.TotalSeconds;
}

Bitte beachten Sie, dass diese Methode die Zeit als Koordinierte Weltzeit (UTC) zurückgibt.

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