getdate, getdate_r - Conversion d'un temps sous forme de chaîne de
caractères au format humain
Bibliothèque C standard (
libc,
-lc)
#include <time.h>
struct tm *getdate(const char *string);
extern int getdate_err;
int getdate_r(const char *restrict string, struct tm *restrict res);
getdate() :
_XOPEN_SOURCE >= 500
getdate_r() :
_GNU_SOURCE
La fonction
getdate() convertit une date et un temps sous forme de
chaîne de caractères, contenue dans le tampon
string, au
format humain. Le temps au format humain est sauvegardé dans une
structure
tm et un pointeur vers cette structure est renvoyé.
Cette structure est allouée statiquement, elle sera donc
écrasée lors d'un prochain appel.
Contrairement à
strptime(3), (qui a un argument
format),
getdate() utilise les formats présents dans le fichier dont le
chemin d'accès complet est donné par la variable d'environnement
DATEMSK. La première ligne du fichier qui peut être mise
en correspondance avec la chaîne passée en paramètre est
utilisée pour la conversion.
La correspondance n'est pas sensible à la casse. Les espaces superflus,
qu'ils soient dans le motif ou dans la chaîne à convertir, sont
ignorés.
Les paramètres de conversion qu'un motif peut contenir sont les
mêmes que pour
strptime(3). Un indicateur de conversion
supplémentaire est spécifié dans POSIX.1-2001 :
- %Z
- Nom du fuseaux horaire (non implémenté dans
le glibc).
Lorsque
%Z est spécifié, la structure contenant le temps au
format humain est initialisée avec le temps actuel du fuseaux horaire.
Sinon, elle est initialisée sous forme humaine à l'heure locale
(comme lors d'un appel à
localtime(3)).
Lorsque seul le jour de la semaine est donné, le jour pris en compte sera
le premier jour correspondant à partir d'aujourd'hui inclus.
Lorsque seul le mois est spécifié (et pas l'année), le mois
pris en compte est le premier mois correspondant à partir du mois
courant inclus. Si aucun jour n'est indiqué, le premier jour du mois
est pris par défaut.
Lorsque les heures, minutes et secondes ne sont pas indiquées, l'heure
courante (heures, minutes et secondes) est prise par défaut.
Si aucune date n'est indiquée, mais que l'on connaît l'heure,
l'heure prise en compte sera la première occurrence de cette heure,
à partir de l'heure courante incluse.
getdate_r est une extension GNU qui fournit une version réentrante
de
getdate. Au lieu d'utiliser une variable globale pour rapporter les
erreurs et un tampon statique pour renvoyer le temps au format humain, elle
renvoie les erreurs avec la valeur de retour de la fonction et le temps au
format humain dans le tampon alloué par l'appelant pointé par
res.
En cas de succès,
getdate() renvoie un pointeur vers une structure
struct tm. Sinon elle renvoie NULL et positionne la variable globale
getdate_err avec l'un des codes d'erreur ci-dessous. La modification
éventuelle de
errno est indéfinie.
En cas de succès,
getdate_r() renvoie 0. En cas d'erreur, elle
renvoie l'un des codes d'erreur ci-dessous.
Les erreurs suivantes sont renvoyées par
getdate_err (pour
getdate()) ou par le code de retour de la fonction (pour
getdate_r()).
- 1
- La variable d'environnement DATEMSK est non
définie ou sa valeur est une chaîne vide.
- 2
- Le fichier de modèle spécifié par
DATEMSK ne peut être ouvert en lecture.
- 3
- Impossible de lire l'état du fichier.
- 4
- Le fichier de modèle n'est pas un fichier
régulier.
- 5
- Une erreur est survenue au cours de la lecture du fichier
de modèle.
- 6
- Échec d'allocation mémoire (pas assez de
mémoire disponible).
- 7
- Il n'y a pas de ligne dans le fichier qui puisse
être mise en correspondance avec l'entrée.
- 8
- Paramètres d'entrée invalides.
- DATEMSK
- Fichier contenant les motifs de formatage.
-
TZ, LC_TIME
- Variables utilisées par strptime(3).
Pour une explication des termes utilisés dans cette section, consulter
attributes(7).
Interface |
Attribut |
Valeur |
getdate() |
Sécurité des threads |
MT-Unsafe race:getdate env locale |
getdate_r() |
Sécurité des threads |
MT-Safe env locale |
POSIX.1-2001, POSIX.1-2008.
La spécification POSIX.1 pour
strptime(3) contient des
spécifications de conversion utilisant les modificateurs
%E ou
%O alors que de tels modificateurs ne sont pas indiqués pour
getdate(). Dans la glibc,
getdate() est
implémentée avec
strptime(3), si bien que les deux
fonctions supportent exactement les mêmes conversions.
Le programme ci-dessous appelle
getdate() pour chaque argument de la
ligne de commande et affiche la valeur des champs de la structure
tm
renvoyée. La session shell suivante montre des exemples d'utilisation
de ce programme :
$ TFILE=$PWD/tfile
$ echo '%A' > $TFILE # Full name of the day of the week
$ echo '%T' >> $TFILE # Time (HH:MM:SS)
$ echo '%F' >> $TFILE # ISO date (YYYY-MM-DD)
$ date
$ export DATEMSK=$TFILE
$ ./a.out Tuesday '2009-12-28' '12:22:33'
Sun Sep 7 06:03:36 CEST 2008
Call 1 ("Tuesday") succeeded:
tm_sec = 36
tm_min = 3
tm_hour = 6
tm_mday = 9
tm_mon = 8
tm_year = 108
tm_wday = 2
tm_yday = 252
tm_isdst = 1
Call 2 ("2009-12-28") succeeded:
tm_sec = 36
tm_min = 3
tm_hour = 6
tm_mday = 28
tm_mon = 11
tm_year = 109
tm_wday = 1
tm_yday = 361
tm_isdst = 0
Call 3 ("12:22:33") succeeded:
tm_sec = 33
tm_min = 22
tm_hour = 12
tm_mday = 7
tm_mon = 8
tm_year = 108
tm_wday = 0
tm_yday = 250
tm_isdst = 1
#define _GNU_SOURCE
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int
main(int argc, char *argv[])
{
struct tm *tmp;
for (size_t j = 1; j < argc; j++) {
tmp = getdate(argv[j]);
if (tmp == NULL) {
printf("Call %zu failed; getdate_err = %d\n",
j, getdate_err);
continue;
}
printf("Call %zu (\"%s\") succeeded:\n", j, argv[j]);
printf(" tm_sec = %d\n", tmp->tm_sec);
printf(" tm_min = %d\n", tmp->tm_min);
printf(" tm_hour = %d\n", tmp->tm_hour);
printf(" tm_mday = %d\n", tmp->tm_mday);
printf(" tm_mon = %d\n", tmp->tm_mon);
printf(" tm_year = %d\n", tmp->tm_year);
printf(" tm_wday = %d\n", tmp->tm_wday);
printf(" tm_yday = %d\n", tmp->tm_yday);
printf(" tm_isdst = %d\n", tmp->tm_isdst);
}
exit(EXIT_SUCCESS);
}
time(2),
localtime(3),
setlocale(3),
strftime(3),
strptime(3)
La traduction française de cette page de manuel a été
créée par Christophe Blaess
<
https://www.blaess.fr/christophe/>, Stéphan Rafin
<
[email protected]>, Thierry Vignaud
<
[email protected]>, François Micaux, Alain Portal
<
[email protected]>, Jean-Philippe Guérard
<
[email protected]>, Jean-Luc Coulon (f5ibh)
<
[email protected]>, Julien Cristau
<
[email protected]>, Thomas Huriaux <
[email protected]>,
Nicolas François <
[email protected]>, Florentin
Duneau <
[email protected]>, Simon Paillard
<
[email protected]>, Denis Barbier
<
[email protected]> et David Prévot <
[email protected]>
Cette traduction est une documentation libre ; veuillez vous reporter
à la
GNU
General Public License version 3 concernant les conditions de copie
et de distribution. Il n'y a aucune RESPONSABILITÉ LÉGALE.
Si vous découvrez un bogue dans la traduction de cette page de manuel,
veuillez envoyer un message à
[email protected]