ctime, asctime, gmtime, localtime, mktime - Conversions de dates et heures binaires en ASCII.
Les fonctions
ctime(),
gmtime() et
localtime() prennent
toutes un argument de type
time_t qui représente une date.
Si l'on interprète cet argument comme une valeur absolue, il s'agit du
nombre de secondes écoulées depuis le 1er Janvier 1970 à 00h 00m 00s en
Temps Universel (TU).
Les fonctions
asctime() et
mktime() utilisent toutes deux un
argument de type
struct tm, c'est à dire une représentation binaire
divisée en année, mois, jour, heure...
Cette structure
tm est définie
dans
<time.h> ainsi :
-
struct tm {
int tm_sec; /* secondes */
int tm_min; /* minutes */
int tm_hour; /* heures */
int tm_mday; /* quantième du mois */
int tm_mon; /* mois (0 à 11 !) */
int tm_year; /* année */
int tm_wday; /* jour de la semaine */
int tm_yday; /* jour de l'année */
int tm_isdst; /* décalage horaire */
};
Les membres de la structure
tm sont :
- tm_sec
-
Le nombre de secondes écoulées depuis le dernier changement de minute.
Normalement dans l'intervalle 0 à 59, ce membre peut aller jusqu'à
61 durant les secondes de rattrapage périodique.
- tm_min
-
Le nombre de minutes écoulées depuis le dernier changement d'heure, dans
l'intervalle 0 à 59.
- tm_hour
-
Le nombre d'heures écoulées depuis Minuit, dans l'intervalle 0 à 23.
- tm_mday
-
Le quantième du mois, dans l'intervalle 1 à 31.
- tm_mon
-
Le nombre de mois écoulés depuis le début de l'année, dans l'intervalle 0 à 11.
- tm_year
-
Le nombre d'années écoulées depuis 1900.
- tm_wday
-
Le nombre de jours écoulés depuis Dimanche, dans l'intervalle 0 à 6.
- tm_yday
-
Le nombre de jours écoulés depuis le 1er Janvier, dans l'intervalle
0 à 365 (0 à 364 si l'année n'est pas bissextile).
- tm_isdst
-
Un drapeau indiquant si le décalage d'heure hiver/éte est en cours au
moment de l'appel. La valeur retournée est positive si le décalage est
en fonction, nulle s'il ne l'est pas, et négative si l'information n'est
pas disponible.
L'appel
ctime(t)
est équivalent à
asctime(localtime(t)).
Il convertit la date
t en une chaîne de caractères de le forme
-
"Wed Jun 30 21:49:08 1993\n"
L'internationalisation de la date est possible en utilisant la fonction
setlocale(3) et
strftime(3).
Les abréviations pour les jours de la semaine sont `Sun', `Mon', `Tue', `Wed',
`Thu', `Fri', et `Sat'.
les abréviations pour les mois sont `Jan', `Feb', `Mar', `Apr', `May', `Jun',
`Jul', `Aug', `Sep', `Oct', `Nov', et `Dec'.
La valeur renvoyée pointe sur une chaîne statique qui sera écrasée à
chaque appel de l'une des fonctions ci-dessus.
La fonction renseigne également la variable externe
tzname avec
les informations concernant le fuseau horaire (voir
tzset(3)).
La version réentrante
ctime_r() effectue le même travail mais stocke
la chaîne dans un buffer fourni par l'appelant, d'une longueur minimale de
26 caractères. Elle ne renseigne pas nécessairement
tzname.
la fonction
gmtime() convertit la date
timep en une représentation
struct tm exprimée en Temps Universel.
Elle peut renvoyer NULL quand l'année ne tient pas dans un entier. La valeur
renvoyée pointe vers une structure allouée statiquement qui peut être écrasée
par une invocation ultérieure d'une fonction de date ou d'heure.
La fonction réentrante
gmtime_r() effectue le même travail mais stocke
le résultat dans une structure fournie par l'appelant.
La fonction
localtime() convertit la date
timep en une
représentation
struct tm exprimée en fonction du fuseau horaire de
l'utilisateur. Cette fonction se comporte comme si elle appelait
tzset(3)
et renseigne les variables externes
tzname
avec les informations concernant le fuseau horaire,
timezone avec
la différence (en secondes) entre Temps Universel et Temps Local,
et
daylight avec une valeur non-nulle si le décalage horaire
saisonnier s'applique.
La valeur
renvoyée pointe vers une structure allouée statiquement qui peut être écrasée
par une invocation ultérieure d'une fonction de date ou d'heure.
La fonction réentrante
localtime_r() effectue le même travail mais stocke
le résultat dans une structure fournie par l'appelant.
La fonction
asctime() convertit la date
tm exprimée
sous forme
struct tm en une chaîne de caractères du même format
que
ctime().
La valeur renvoyée pointe sur une chaîne statique qui sera écrasée à
chaque appel de l'une des fonctions ci-dessus.
La version réentrante
asctime_r() effectue le même travail mais stocke
la chaîne dans un buffer fourni par l'appelant, d'une longueur minimale de
26 caractères.
La fonction
mktime() convertit la date
timeptr exprimée
sous forme
struct tm en une date locale sous forme
time_t.
La fonction ignore les valeurs transmises des membres
tm_wday
et
tm_yday de la structure, et les recalcule en utilisant les
autres membres.
Si des membres de la structure débordent de l'intervalle autorisé, ils
seront corrigés (par exemple le 40 Octobre devient le 9 Novembre).
L'appel de
mktime() renseigne également la variable
externe
tzname avec les informations concernant le fuseau
horaire.
Si la structure transmise ne peut pas être convertie,
mktime()
renvoie la valeur (time_t)(-1) et ne modifie pas les membres
tm_wday et
tm_yday.
Chacune de ces fonctions renvoie la valeur décrite plus haut, ou NULL
(-1 dans le cas de mktime()) si une erreur est détectée.
Christophe Blaess, 1996-2003.