Convertisseur .NET Ticks vers timestamp Unix
Convertissez .NET Ticks en temps Unix avec la formule exacte et la prise en charge des grandes valeurs. Sortie en secondes, millisecondes, ISO 8601 et format lisible.
intervalles de 100 ns depuis le 01-01-0001
Que sont les ticks .NET ?
En .NET, DateTime.Ticks et TimeSpan.Ticks mesurent le temps en unités de 100 nanosecondes. Un nombre de ticks DateTime est le nombre d'intervalles de 100 nanosecondes depuis 00:00:00 le 1er janvier 0001 dans le calendrier grégorien proleptique.
- Époque : 0001-01-01 00:00:00
- Résolution : ticks de 100 nanosecondes (10 000 000 par seconde)
- Une valeur actuelle vaut environ 6,4 × 10^17
- C#: DateTime.UtcNow.Ticks, DateTimeOffset.UtcNow.Ticks
Comment convertir des ticks .NET en horodatage Unix
Il y a 62 135 596 800 secondes entre 0001-01-01 et 1970-01-01. Divisez les ticks par 10 000 000 pour obtenir des secondes depuis l'an 1, puis soustrayez ce décalage.
- Unix seconds = Ticks / 10000000 − 62135596800
- Unix milliseconds = Ticks / 10000 − 62135596800000
- Exemple : 638355968000000000 → 1700000000 → 2023-11-14 22:13:20 UTC
- En C# : new DateTimeOffset(dt).ToUnixTimeSeconds() le fait pour vous
Code C# et cas limites
Le .NET moderne propose DateTimeOffset.ToUnixTimeSeconds() et ToUnixTimeMilliseconds(), ainsi que DateTimeOffset.FromUnixTimeSeconds() pour le sens inverse. N'utilisez les ticks directement que pour interopérer avec des données sérialisées. Notez que DateTime.Ticks ignore le DateTimeKind, normalisez donc toujours d'abord en UTC.
- C# : var unixSeconds = new DateTimeOffset(dt.ToUniversalTime()).ToUnixTimeSeconds();
- C# : var dt = DateTimeOffset.FromUnixTimeMilliseconds(ms).UtcDateTime;
- Ticks de 0 = 0001-01-01 ; DateTime.MaxValue.Ticks = 3155378975999999999
- Les valeurs dépassent les entiers sûrs de JavaScript, donc ce convertisseur utilise BigInt
Convertisseurs de format d'horodatage associés
Notes sur les bibliothèques et la sérialisation
Les ticks apparaissent dans d'anciens formats de sérialisation .NET et conventions JSON. Faites attention à :
- Dates JSON héritées de Microsoft : "/Date(1700000000000+0000)/" enveloppent des millisecondes (pas des ticks)
- DateTimeOffset.UnixEpoch est le point zéro standard dans le .NET moderne
- DateTime.MaxValue.Ticks = 3155378975999999999 ; des valeurs aussi élevées indiquent presque sûrement une sentinelle « jamais »
- TimeSpan.Ticks est la même unité mais mesurée comme une durée ; ne soustrayez pas aveuglément un tick DateTime d'un tick TimeSpan
- Newtonsoft.Json et System.Text.Json utilisent ISO 8601 par défaut — préférez-le aux ticks bruts quand vous avez le choix
FAQ
- Combien de ticks y a-t-il dans une seconde ?
- Exactement 10 000 000 de ticks — chaque tick fait 100 nanosecondes.
- Quelle est la différence entre les ticks .NET et le FILETIME Windows ?
- Les deux utilisent des unités de 100 nanosecondes, mais les ticks .NET comptent depuis le 0001-01-01 tandis que FILETIME compte depuis le 1601-01-01. Ils diffèrent d'un décalage fixe de 504 911 232 000 000 000 ticks.
- Comment obtenir le temps Unix à partir d'un DateTime C# ?
- Utilisez new DateTimeOffset(dateTime.ToUniversalTime()).ToUnixTimeSeconds() ou .ToUnixTimeMilliseconds().