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 :
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));
}
Il me semble que c'est à peu près correct et ça l'est pour certaines valeurs de date...
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