Convertitore da .NET Ticks a timestamp Unix
Converti .NET Ticks in tempo Unix con la formula esatta e supporto per valori grandi. Output in secondi, millisecondi, ISO 8601 e formato leggibile.
intervalli di 100 ns dal 01-01-0001
Cosa sono i tick di .NET?
In .NET, DateTime.Ticks e TimeSpan.Ticks misurano il tempo in unità da 100 nanosecondi. Un conteggio di tick DateTime è il numero di intervalli da 100 nanosecondi dalle 00:00:00 del 1° gennaio 0001 nel calendario gregoriano prolettico.
- Epoca: 0001-01-01 00:00:00
- Risoluzione: tick da 100 nanosecondi (10.000.000 al secondo)
- Un valore attuale è circa 6,4 × 10^17
- C#: DateTime.UtcNow.Ticks, DateTimeOffset.UtcNow.Ticks
Come convertire i tick di .NET in un timestamp Unix
Ci sono 62.135.596.800 secondi tra 0001-01-01 e 1970-01-01. Dividi i tick per 10.000.000 per ottenere i secondi dall'anno 1, poi sottrai quell'offset.
- Unix seconds = Ticks / 10000000 − 62135596800
- Unix milliseconds = Ticks / 10000 − 62135596800000
- Esempio: 638355968000000000 → 1700000000 → 2023-11-14 22:13:20 UTC
- In C#: new DateTimeOffset(dt).ToUnixTimeSeconds() lo fa per te
Codice C# e casi limite
Il .NET moderno offre DateTimeOffset.ToUnixTimeSeconds() e ToUnixTimeMilliseconds(), e DateTimeOffset.FromUnixTimeSeconds() per la direzione inversa. Usa i tick direttamente solo quando interoperi con dati serializzati. Nota che DateTime.Ticks ignora il DateTimeKind, quindi normalizza sempre prima in UTC.
- C#: var unixSeconds = new DateTimeOffset(dt.ToUniversalTime()).ToUnixTimeSeconds();
- C#: var dt = DateTimeOffset.FromUnixTimeMilliseconds(ms).UtcDateTime;
- Tick di 0 = 0001-01-01; DateTime.MaxValue.Ticks = 3155378975999999999
- I valori superano gli interi sicuri di JavaScript, quindi questo convertitore usa BigInt
Convertitori di formato timestamp correlati
Note su librerie e serializzazione
I tick compaiono in vecchi formati di serializzazione .NET e convenzioni JSON. Attenzione a:
- Date JSON Microsoft legacy: "/Date(1700000000000+0000)/" racchiudono millisecondi (non tick)
- DateTimeOffset.UnixEpoch è il punto zero standard nel .NET moderno
- DateTime.MaxValue.Ticks = 3155378975999999999; valori così alti indicano quasi certamente una sentinella «mai»
- TimeSpan.Ticks è la stessa unità ma misurata come durata; non sottrarre alla cieca un tick DateTime da un tick TimeSpan
- Newtonsoft.Json e System.Text.Json usano ISO 8601 per impostazione predefinita — preferiscilo ai tick grezzi quando puoi scegliere
FAQ
- Quanti tick ci sono in un secondo?
- Esattamente 10.000.000 di tick — ogni tick è 100 nanosecondi.
- Qual è la differenza tra i tick di .NET e il FILETIME di Windows?
- Entrambi usano unità di 100 nanosecondi, ma i tick di .NET contano dal 0001-01-01 mentre FILETIME conta dal 1601-01-01. Differiscono di un offset fisso di 504.911.232.000.000.000 di tick.
- Come ottengo il tempo Unix da un DateTime C#?
- Usa new DateTimeOffset(dateTime.ToUniversalTime()).ToUnixTimeSeconds() o .ToUnixTimeMilliseconds().