J'essaye de convertir une variable C # DateTime en heure Unix, c'est-à-dire le nombre de secondes depuis le 1er janvier 1970. On dirait qu'un DateTime est en fait implémenté comme le nombre de «ticks» depuis le 1er janvier 0001.
Ma pensée actuelle est de soustraire le 1er janvier 1970 de mon DateTime comme ceci:
TimeSpan span= DateTime.Now.Subtract(new DateTime(1970,1,1,0,0,0));
return span.TotalSeconds;
Y a-t-il un meilleur moyen?
Réponses:
C'est fondamentalement ça. Voici les méthodes que j'utilise pour convertir vers et depuis l'époque de l'époque Unix:
Mise à jour: à partir de .Net Core 2.1 et .Net Standard 2.1, une date / heure égale à l'époque Unix peut être obtenue à partir du fichier statique
DateTime.UnixEpoch
.la source
t specify this explicitly and somewhere later in code you
ToUniversalTime (), vous vous retrouverez avec une mauvaise heure Utc, car par défaut, DateTime n'est PAS Utc.Si le reste de votre système fonctionne avec DateTimeOffset au lieu de DateTime, il existe une fonctionnalité très pratique:
la source
var time = DateTimeOffset.FromUnixTimeSeconds(5000);
MS DocLa seule chose que je vois, c'est que c'est censé être depuis minuit le 1er janvier 1970 UTC
la source
Vous souhaitez probablement utiliser DateTime.UtcNow pour éviter les problèmes de fuseau horaire
la source
Cette approche sera bonne si la date-heure en question est en UTC, ou représente l'heure locale dans une zone qui n'a jamais observé l'heure d'été. Les routines de différence DateTime ne tiennent pas compte de l'heure d'été et par conséquent considéreront minuit le 1er juin comme un multiple de 24 heures après minuit le 1er janvier. locale, donc je ne pense pas qu'il y ait un bon moyen de gérer correctement n'importe quel moment avant le changement de règle le plus récent.
la source
Vous pouvez créer un startTime et un endTime de DateTime, puis faire endTime.Subtract (startTime). Ensuite, affichez votre durée.
Je pense que cela devrait fonctionner.
la source
J'utilise l'année 2000 au lieu de Epoch Time dans mon calcul. Travailler avec des nombres plus petits est facile à stocker et à transporter et est compatible avec JSON.
Secondes à partir de l'an 2000 :
Secondes à partir de l'heure Unix:
Par exemple, l'année 2020 est:
var year2020 = (new DateTime ()). AddYears (2019) .Ticks; // Parce que DateTime commence déjà à l'année 1
637134336000000000 Tiques depuis le 1 janvier 0001
63713433600 Secondes depuis le 1 janvier 0001
1577836800 Secondes depuis Epoch Time
631152000 Secondes depuis l'an 2000
Références:
Convertisseur de temps d'époque: https://www.epochconverter.com
Convertisseur de l'année 1: https://www.epochconverter.com/seconds-days-since-y0
la source