Bonjour,
J'ai eu besoin récemment de calculer le timestamp UNIX en C#.
Il s'agit donc du nombre de secondes entre la date d'origine : 01/01/1970 00:00:00 UTC et la date souhaitée.
Pour récupérer le timestamp d'une date source, j'ai donc commencé par écrire la fonction suivante :
Problème, je me retrouvais avec un timestamp, qui, une fois reconverti en date, me donnait ma date + 1 heure !!!Code:
1
2
3
4
5
6
7 private int timeSpanDate(DateTime dateSource) { TimeSpan t = (dateSource.ToUniversalTime() - new DateTime(1970, 1, 1, 0, 0, 0).ToUniversalTime()); int timestamp = (int)t.TotalSeconds; return timestamp; }
Après avoir essayé de multiples formules avec les ToLocalTime, etc, je me suis rendu compte que le code suivant :
ne renvoie pas :Code:new DateTime(1970, 1, 1, 0, 0, 0).ToUniversalTime()
mais :Code:01/01/1970 00:00:00
D'où l'heure en plus...Code:31/12/1969 23:00:00
J'avoue ne pas bien comprendre pourquoi...Je pensais que la méthode ToUniversalTime permettait simplement de convertir le DateTime en temps UTC, apparemment elle fait plus que cela.
Du coup, pour obtenir le bon timestamp, j'ai utilisé la fonction suivante, avec la conversion UTC à l'intérieur du constructeur du DateTime :
Si quelqu'un sait pourquoi ma première version ne fonctionne pas, je suis preneur d'informations, à titre informatif. Quelque chose m'échappe...Code:
1
2
3
4
5
6
7 private int timeSpanDate(DateTime dateSource) { TimeSpan t = (dateSource.ToUniversalTime() - new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc)); int timestamp = (int)t.TotalSeconds; return timestamp; }
Merci.