Ich habe mich im Stackoverflow umgesehen und mir sogar einige der vorgeschlagenen Fragen angesehen, und keine scheint zu antworten. Wie erhält man einen Unix-Zeitstempel in C #?
c#
timestamp
unix-timestamp
bizzehdee
quelle
quelle
Antworten:
Sie erhalten einen Unix-Zeitstempel in C #, indem Sie
DateTime.UtcNow
die Epochenzeit vom 01.01.1970 verwenden und subtrahieren.z.B
DateTime.UtcNow
kann durch jedesDateTime
Objekt ersetzt werden, für das Sie den Unix-Zeitstempel erhalten möchten.Es gibt auch ein Feld,
DateTime.UnixEpoch
das von MSFT sehr schlecht dokumentiert ist, aber möglicherweise ersetzt wirdnew DateTime(1970, 1, 1)
quelle
DateTime.UtcNow.Subtract(new DateTime(1970, 1, 1)).Ticks / TimeSpan.TicksPerSecond;
Ab .NET 4.6 gibt es
DateTimeOffset.ToUnixTimeSeconds()
.Dies ist eine Instanzmethode, daher wird erwartet, dass Sie sie für eine Instanz von aufrufen
DateTimeOffset
. Sie können auch eine beliebige Instanz von übertragenDateTime
, achten Sie jedoch auf die Zeitzone .So erhalten Sie den aktuellen Zeitstempel:
So erhalten Sie den Zeitstempel von
DateTime
:quelle
Int64
- zu dem Zeitpunkt, an dem es vorbei ist, würden wir keine Erdjahre mehr verwenden, da es keine Erde gibt.DateTimeOffset.Now.ToUnixTimeSeconds()
Sie können auch Ticks verwenden. Ich codiere für Windows Mobile, habe also nicht alle Methoden. TotalSeconds steht mir nicht zur Verfügung.
oder
quelle
new DateTime(1970, 1, 1)
Erstellt eine Zeit mit nicht angegebenerKind
Eigenschaft. Was Sie wirklich wollen,new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc)
um wirklich richtig zu seinDas benutze ich:
Beachten Sie, dass diese Methode die Zeit als Coordinated Univeral Time (UTC) zurückgibt.
quelle
double
Typ; ein zu langes Casting führt zu Präzisionsverlust.)Das Abschneiden
.TotalSeconds
ist wichtig, da es definiert ist alsthe value of the current System.TimeSpan structure expressed in whole fractional seconds.
Und wie wäre es mit einer Erweiterung für
DateTime
? Der zweite ist wahrscheinlich verwirrender, dass es sich lohnt, bis Eigenschaftserweiterungen existieren.quelle
Wenn Sie 1970 von der aktuellen Zeit subtrahieren, beachten Sie, dass die Zeitspanne meistens ein Millisekundenfeld ungleich Null enthält. Wenn Sie aus irgendeinem Grund an den Millisekunden interessiert sind, denken Sie daran.
Folgendes habe ich getan, um dieses Problem zu umgehen.
quelle
Das benutze ich.
quelle
Ich habe die elegantesten Ansätze für diese Dienstprogrammmethode zusammengefügt:
quelle
Diese Lösung hat in meiner Situation geholfen:
Verwenden des Helfers im Code:
quelle
Es gibt eine ToUnixTimeMilliseconds für DateTimeOffset im System
Sie können eine ähnliche Methode für DateTime schreiben:
10000000L - Konvertieren von Ticks in Sekunden
62135596800L - Konvertierung des 01.01.01 in den 01.01.1978
Es gibt kein Problem mit Utc und Lecks
quelle
Unten finden Sie eine 2-Wege-Erweiterungsklasse, die Folgendes unterstützt:
Im Fall von OP ist die Verwendung:
oder
Obwohl es eine direkte Antwort gibt, glaube ich, dass es besser ist, einen generischen Ansatz zu verwenden. Insbesondere, weil es höchstwahrscheinlich ein Projekt ist, das eine solche Konvertierung benötigt, werden diese Erweiterungen ohnehin auch benötigt, daher ist es besser, für alle dasselbe Tool zu verwenden.
quelle
Ich habe dies verwendet, nachdem ich eine Weile gekämpft hatte. Es berücksichtigt auch den Zeitzonenversatz:
quelle
Der einfache Code, den ich verwende:
Dieser Code gibt einen Unix-Zeitstempel an, insgesamt Millisekunden vom 01.01.1970 bis heute.
quelle