tm_mday > 31 passé dans une struct tm pour mktime : Valide ! Pourquoi ?
Bonjour,
J'ai une question sur la méthode mktime de <ctime>.
Voici le code qui pose problème :
Code:
1 2 3 4 5 6 7 8 9
| time_t rawTime = 0, time = 0;
struct tm *t = localtime (&rawTime);
t->tm_sec = 0;
t->tm_min = 0;
t->tm_hour = 0;
t->tm_mday = 50;
t->tm_mon = 11;
t->tm_year = 100;
time = mktime(t); |
Normalement time devrait être égal à -1(sur la dernière ligne en rouge) vu que je tente de convertir la date 50ième jour du mois de décembre 2070 :
Citation:
If the calendar time cannot be represented, a value of -1 is returned.
Mais ce n'est pas le cas. Pourquoi ?
Je n'arrive pas à trouver un semblant de réponses sur le net :(
Edit : En faisant des recherches et en utilisant des mots exotiques sur google, j'ai réussi à trouver la réponse à ma question.
C'est mktime qui ajuste les valeurs de la structure. Par ex le 32 janvier sera compris comme le 1 février..
Et le 29 février 2013 sera compris comme le 1 mars 2013.....
Du coup, ça ne m'arrange pas.
Effectivement, pour vérifier une date :
* je faisais appel à localtime pour me fournir une struct tm valide
* je modifiais la struct tm en la remplissant de la date à vérifier
* je donnais la struct tm à mktime et vérifiais si le retour == -1 pour voir si la date était correcte..
N'existe-t-il pas une méthode tel que mktime mais qui ne chipote pas lors de la conversion ? Donc qui fait stricto sensu la conversion de la date qu'on lui donne et puis c'est tout.