Es gibt diesen Beispielcode, aber dann wird über Millisekunden- / Nanosekundenprobleme gesprochen.
Die gleiche Frage betrifft MSDN, Sekunden seit der Unix-Epoche in C # .
Das habe ich bisher:
public Double CreatedEpoch
{
get
{
DateTime epoch = new DateTime(1970, 1, 1, 0, 0, 0, 0).ToLocalTime();
TimeSpan span = (this.Created.ToLocalTime() - epoch);
return span.TotalSeconds;
}
set
{
DateTime epoch = new DateTime(1970, 1, 1, 0, 0, 0, 0).ToLocalTime();
this.Created = epoch.AddSeconds(value);
}
}
DateTimeOffset.FromUnixTimeSeconds
undDateTimeOffset.ToUnixTimeSeconds
Methoden. Es gibt auch Methoden für die Millisekunden-Unix-Zeit.Antworten:
Folgendes brauchen Sie:
Oder für Java (was anders ist, weil der Zeitstempel in Millisekunden und nicht in Sekunden angegeben ist):
quelle
dtDateTime.AddMilliseconds(javaTimeStamp).ToLocalTime();
static DateTimeOffset.FromUnixMilliseconds
undDateTimeOffset.ToUnixMilliseconds
.Die neueste Version von .NET (v4.6) bietet integrierte Unterstützung für Unix- Zeitkonvertierungen . Dies schließt sowohl die Unix-Zeit als auch die Unix-Zeit ein, die entweder durch Sekunden oder Millisekunden dargestellt wird.
DateTimeOffset
:DateTimeOffset
Unix-Zeit in Sekunden:DateTimeOffset
:DateTimeOffset
Unix-Zeit in Millisekunden:Hinweis: Diese Methoden werden in und aus einer UTC konvertiert
DateTimeOffset
. Um eineDateTime
Darstellung zu erhalten, verwenden Sie einfach die EigenschaftenDateTimeOffset.UtcDateTime
oderDateTimeOffset.LocalDateTime
:quelle
ToLocalTime
wenn Sie möchten.long unixMilliseconds = DateTimeOffset.Now.ToUnixTimeMilliseconds();
Zeitstempel von DateTime zu UNIX:
quelle
Aus Wikipedia :
Das ist also mein Code:
quelle
Seien Sie vorsichtig, wenn Sie eine Genauigkeit von mehr als Millisekunden benötigen!
.NET (v4.6) -Methoden (z. B. FromUnixTimeMilliseconds ) bieten diese Genauigkeit nicht.
AddSeconds und AddMilliseconds schneiden die Mikrosekunden ebenfalls doppelt ab.
Diese Versionen haben eine hohe Präzision:
Unix -> DateTime
DateTime -> Unix
quelle
UnixTimestampToDateTime
ist das mitgelieferteunixTime
noch in Sekunden, oder?Siehe IdentityModel.EpochTimeExtensions
quelle
DateTime.Ticks
dass Int64 (lang) ist, also vermeiden sie eine zusätzliche ungeprüfte Besetzung.Als Ergänzung zu ScottChers Antwort befand ich mich kürzlich in dem nervigen Szenario, dass UNIX-Zeitstempel sowohl in Sekunden als auch in Millisekunden willkürlich in einem Eingabedatensatz gemischt wurden. Der folgende Code scheint damit gut umzugehen:
quelle
Die Unix-Zeitkonvertierung ist neu in .NET Framework 4.6.
Sie können jetzt einfacher Datums- und Zeitwerte in oder von .NET Framework-Typen und Unix-Zeit konvertieren. Dies kann beispielsweise beim Konvertieren von Zeitwerten zwischen einem JavaScript-Client und einem .NET-Server erforderlich sein. Die folgenden APIs wurden der DateTimeOffset-Struktur hinzugefügt :
quelle
Ich fand die richtige Antwort, indem ich die Konvertierung mit dem 1.1.1970 ohne die lokale Zeitanpassung verglich.
quelle
// 1510396991
// [11.11.2017 10:43:11 +00: 00]
quelle
Ab .net 4.6 können Sie Folgendes tun:
quelle
Natürlich kann man
unixEpoch
eine globale Statik erstellen, so dass sie nur einmal in Ihrem Projekt erscheinen muss, und man kann sie verwenden,AddSeconds
wenn die UNIX-Zeit in Sekunden ist.Um den anderen Weg zu gehen:
Auf Int64 abschneiden und / oder
TotalSeconds
nach Bedarf verwenden.quelle
Geschrieben eine einfachste Erweiterung, die für uns funktioniert. Wenn jemand danach sucht ...
quelle
quelle
Ein Unix-Tick ist 1 Sekunde (wenn ich mich gut erinnere) und ein .NET-Tick ist 100 Nanosekunden.
Wenn Sie Probleme mit Nanosekunden haben, können Sie AddTick (Wert 10000000 *) verwenden.
quelle
Ich brauchte eine konvertieren timeval struct (Sekunden, Mikrosekunden) , die
UNIX time
aufDateTime
ohne Präzision zu verlieren und haben festgestellt , keine Antwort hier also dachte ich , ich meine nur noch hinzufügen könnte:quelle
Sie können DateTimeOffset verwenden .
Zum Beispiel. Ich habe ein DateTime-Objekt
Wenn ich es in Unix-Zeitstempel konvertieren möchte, kann ich Folgendes erreichen
Weitere Informationen finden Sie unter folgendem Link: DateTimeOffset.ToUnixTimeSeconds-Methode
quelle
Sie können UnixTime.UnixTimeToDateTime (double datetime) aufrufen.
quelle
Für .NET 4.6 und höher:
quelle