Bonjour, je m'occupe d'une partie des conversions de date pour mon programme et j'ai un petit problème...
Le but est d'ici de prendre une date : 01/01/2010 par exemple, de la convertir en timestamp puis de la reconvertir en date.
Voici mon code :
Il me semble que c'est à peu près correct et ça l'est pour certaines valeurs de date...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42 int civile_date_to_ts(char * date){ int timestamp = 0; struct tm date_tm; char tmp[5]; tmp[0] = date[0]; tmp[1] = date[1]; tmp[2] = '\0'; date_tm.tm_mday = atoi(tmp); // jour tmp[0] = date[3]; tmp[1] = date[4]; tmp[2] = '\0'; date_tm.tm_mon = atoi(tmp) - 1; // mois (-1 car commence a 0) tmp[0] = date[6]; tmp[1] = date[7]; tmp[2] = date[8]; tmp[3] = date[9]; tmp[4] = '\0'; date_tm.tm_year = atoi(tmp) - 1900; // annee date_tm.tm_hour = 0; // heure date_tm.tm_min = 0; // minute date_tm.tm_sec = 0; // seconde return mktime(&date_tm); } char * ts_to_civile_date_time(int timestamp, char * date){ time_t t = timestamp; strftime(date, 20, "%d/%m/%Y %H:%M:%S", localtime(&t)); return date; } void main(){ int timestamp; timestamp = civile_date_to_ts("01/01/2010"); printf("%d\n", timestamp); printf("%s\n\n", ts_to_civile_date_time(timestamp_file, temp)); }
A priori, les timestamp obtenus sont corrects car comparés avec des outils en ligne ( http://www.timestamp.fr/ ). Par contre, les date obtenues a partir des timestamp sont parfois mauvaises. Voici quelques exemples :
01/01/2010 => 1262300400 => 31/12/2009 23:00
01/02/2010 => 1264978800 => 31/01/2010 23:00
01/03/2010 => 1267398000 => 28/02/2010 23:00
01/04/2010 => 1270076400 => 01/04/2010 00:00
01/05/2010 => 1272668400 => 01/05/2010 00:00
01/06/2010 => 1275346800 => 01/06/2010 00:00
01/07/2010 => 1277938800 => 01/07/2010 00:00
01/08/2010 => 1280617200 => 01/08/2010 00:00
01/09/2010 => 1283295600 => 01/09/2010 00:00
01/10/2010 => 1285887600 => 01/10/2010 00:00
01/11/2010 => 1288566000 => 31/10/2010 23:00
01/12/2010 => 1291158000 => 30/11/2010 23:00
J'ai d'autre part, fait des tests sur tous les jours du mois de mars et de juillet, sur le premier l'erreur est constante et sur l'autre il n'y a pas d'erreur.
J'ai aussi testé toutes les années entre 2005 et 2015 sur ces deux mois et j'ai la même constatation que précédemment.
Il semblerait donc que cette erreur soit liée au mois de l'année...
Actuellement, je n'ai aucune idée du pourquoi ça fait ça (j'ai consulté de la doc et un peu recherché sur internet mais pas de pistes...).
Si vous avez une idée sur le comment du pourquoi de ce comportement étrange ça m'intéresse, et encore plus si ça permet de le corriger
Merci en tous cas
Partager