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 :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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;
}
Problème, je me retrouvais avec un timestamp, qui, une fois reconverti en date, me donnait ma date + 1 heure !!!

Après avoir essayé de multiples formules avec les ToLocalTime, etc, je me suis rendu compte que le code suivant :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
new DateTime(1970, 1, 1, 0, 0, 0).ToUniversalTime()
ne renvoie pas :

mais :

D'où l'heure en plus...
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 :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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;
}
Si quelqu'un sait pourquoi ma première version ne fonctionne pas, je suis preneur d'informations, à titre informatif. Quelque chose m'échappe...

Merci.