mktime() : conversion de temps, de date+heure en durée
Prototype:
time_t mktime(struct tm * padh);
dans: <time.h>
Description:
A partir des champs: tm_sec, tm_min, tm_hour, tm_mday et tm_mon d'un agrégat 'struct tm', l'intervalle de temps entre le 1/1/1970 et cette date est évalué.
De plus les valeurs tm_mday et tm_mon sont ré-ajustés si elles ne sont pas dans l'intervalle standard.
Enfin le jour dans la semaine (tm_wday) et le quantième dans l'année (tm_yday) sont calculés.
Voir localtime() pour une description de 'struct tm'
Valeur renvoyée:
- la constante (time_t)-1 si la date est invalide et ne peut être convertie en durée;
- la durée calculée sinon.
Voir aussi:
Portabilité:
Exemple:
/*
Evaluation des dates 29/2/95 et 29/2/96
la première va être réajustée car l'année 1995 n'est pas bissextile
*/
#include
#include /* pour struct tm, mktime et ctime */
void main(void) {
struct tm dh1, dh2;
time_t intps;
dh1.tm_sec = 0; dh1.tm_min = 0; dh1.tm_hour = 0;
dh1.tm_mon = 1; /* janvier:0, février:1 ...*/
dh1.tm_mday = 29;
dh1.tm_year = 95; /* le siècle n'est pas à mettre */
dh1.tm_isdst = -1;
dh2=dh1;
/* L'année 95 est non bisextile, jour et mois sont rectifiés */
dh1.tm_year = 96;
intps = mktime ( & dh1 );
printf("date:%s (jour:%d,mois:%d)\n",
ctime(&intps), dh1.tm_mday, dh1.tm_mon+1);
/* En 96, le 29 février existe */
dh2 = dh1; dh2.tm_year = 95; intps = mktime ( & dh2 );
printf("date:%s (jour:%d,mois:%d)\n\n",
ctime(&intps), dh2.tm_mday, dh2.tm_mon+1);
}