.NET Ticks zu Unix-Timestamp-Konverter
Wandle .NET Ticks in Unix-Zeit um — mit exakter Formel und Unterstützung großer Werte. Ausgabe in Sekunden, Millisekunden, ISO 8601 und lesbarem Format.
100-ns-Intervalle seit 01.01.0001
Was sind .NET-Ticks?
In .NET messen DateTime.Ticks und TimeSpan.Ticks die Zeit in 100-Nanosekunden-Einheiten. Ein DateTime-Tick-Zähler ist die Anzahl der 100-Nanosekunden-Intervalle seit 00:00:00 am 1. Januar 0001 im proleptischen gregorianischen Kalender.
- Epoche: 0001-01-01 00:00:00
- Auflösung: 100-Nanosekunden-Ticks (10.000.000 pro Sekunde)
- Ein heutiger Wert liegt bei etwa 6,4 × 10^17
- C#: DateTime.UtcNow.Ticks, DateTimeOffset.UtcNow.Ticks
.NET-Ticks in einen Unix-Zeitstempel umwandeln
Zwischen 0001-01-01 und 1970-01-01 liegen 62.135.596.800 Sekunden. Teile die Ticks durch 10.000.000, um Sekunden seit dem Jahr 1 zu erhalten, und subtrahiere dann diesen Versatz.
- Unix seconds = Ticks / 10000000 − 62135596800
- Unix milliseconds = Ticks / 10000 − 62135596800000
- Beispiel: 638355968000000000 → 1700000000 → 2023-11-14 22:13:20 UTC
- In C#: new DateTimeOffset(dt).ToUnixTimeSeconds() erledigt das für dich
C#-Code und Sonderfälle
Modernes .NET bietet DateTimeOffset.ToUnixTimeSeconds() und ToUnixTimeMilliseconds() sowie DateTimeOffset.FromUnixTimeSeconds() für die Gegenrichtung. Verwende Ticks nur direkt, wenn du mit serialisierten Daten interoperierst. Beachte: DateTime.Ticks ignoriert die DateTimeKind, normalisiere daher immer zuerst auf UTC.
- C#: var unixSeconds = new DateTimeOffset(dt.ToUniversalTime()).ToUnixTimeSeconds();
- C#: var dt = DateTimeOffset.FromUnixTimeMilliseconds(ms).UtcDateTime;
- Ticks von 0 = 0001-01-01; DateTime.MaxValue.Ticks = 3155378975999999999
- Werte überschreiten die sicheren Ganzzahlen von JavaScript, daher verwendet dieser Konverter BigInt
Verwandte Zeitstempelformat-Konverter
Hinweise zu Bibliotheken und Serialisierung
Ticks tauchen in älteren .NET-Serialisierungsformaten und JSON-Konventionen auf. Achte auf:
- Veraltete Microsoft-JSON-Daten: "/Date(1700000000000+0000)/" umschließen Millisekunden (keine Ticks)
- DateTimeOffset.UnixEpoch ist der Standard-Nullpunkt im modernen .NET
- DateTime.MaxValue.Ticks = 3155378975999999999; so hohe Werte deuten fast sicher auf einen „nie“-Platzhalter hin
- TimeSpan.Ticks ist dieselbe Einheit, aber als Dauer gemessen; ziehe nicht blind einen DateTime-Tick von einem TimeSpan-Tick ab
- Newtonsoft.Json und System.Text.Json verwenden standardmäßig ISO 8601 — bevorzuge das gegenüber rohen Ticks, wenn du die Wahl hast
FAQ
- Wie viele Ticks sind in einer Sekunde?
- Genau 10.000.000 Ticks — jeder Tick sind 100 Nanosekunden.
- Was ist der Unterschied zwischen .NET-Ticks und Windows FILETIME?
- Beide verwenden 100-Nanosekunden-Einheiten, aber .NET-Ticks zählen ab dem 0001-01-01, während FILETIME ab dem 1601-01-01 zählt. Sie unterscheiden sich um einen festen Versatz von 504.911.232.000.000.000 Ticks.
- Wie erhalte ich Unix-Zeit aus einem C#-DateTime?
- Verwende new DateTimeOffset(dateTime.ToUniversalTime()).ToUnixTimeSeconds() oder .ToUnixTimeMilliseconds().