getdate(3) Library Functions Manual getdate(3) NOM getdate, getdate_r - Conversion d'un temps sous forme de chaine de caracteres au format humain BIBLIOTHEQUE Bibliotheque C standard (libc, -lc) SYNOPSIS #include struct tm *getdate(const char *string); extern int getdate_err; int getdate_r(const char *restrict string, struct tm *restrict res); Exigences de macros de test de fonctionnalites pour la glibc (consulter feature_test_macros(7)) : getdate() : _XOPEN_SOURCE >= 500 getdate_r() : _GNU_SOURCE DESCRIPTION La fonction getdate() convertit une date et un temps sous forme de chaine de caracteres, contenue dans le tampon string, au format humain. Le temps au format humain est sauvegarde dans une structure tm et un pointeur vers cette structure est renvoye. Cette structure est allouee statiquement, elle sera donc ecrasee lors d'un prochain appel. Contrairement a strptime(3), (qui a un argument format), getdate() utilise les formats presents dans le fichier dont le chemin d'acces complet est donne par la variable d'environnement DATEMSK. La premiere ligne du fichier qui peut etre mise en correspondance avec la chaine passee en parametre est utilisee pour la conversion. La correspondance n'est pas sensible a la casse. Les espaces superflus, qu'ils soient dans le motif ou dans la chaine a convertir, sont ignores. Les parametres de conversion qu'un motif peut contenir sont les memes que pour strptime(3). Un indicateur de conversion supplementaire est specifie dans POSIX.1-2001 : %Z Nom du fuseaux horaire (non implemente dans le glibc). Lorsque %Z est specifie, la structure contenant le temps au format humain est initialisee avec le temps actuel du fuseaux horaire. Sinon, elle est initialisee sous forme humaine a l'heure locale (comme lors d'un appel a localtime(3)). Lorsque seul le jour de la semaine est donne, le jour pris en compte sera le premier jour correspondant a partir d'aujourd'hui inclus. Lorsque seul le mois est specifie (et pas l'annee), le mois pris en compte est le premier mois correspondant a partir du mois courant inclus. Si aucun jour n'est indique, le premier jour du mois est pris par defaut. Lorsque les heures, minutes et secondes ne sont pas indiquees, l'heure courante (heures, minutes et secondes) est prise par defaut. Si aucune date n'est indiquee, mais que l'on connait l'heure, l'heure prise en compte sera la premiere occurrence de cette heure, a partir de l'heure courante incluse. getdate_r est une extension GNU qui fournit une version reentrante 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 alloue par l'appelant pointe par res. VALEUR RENVOYEE En cas de succes, 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 eventuelle de errno est indefinie. En cas de succes, getdate_r() renvoie 0. En cas d'erreur, elle renvoie l'un des codes d'erreur ci-dessous. ERREURS Les erreurs suivantes sont renvoyees 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 definie ou sa valeur est une chaine vide. 2 Le fichier de modele specifie par DATEMSK ne peut etre ouvert en lecture. 3 Impossible de lire l'etat du fichier. 4 Le fichier de modele n'est pas un fichier regulier. 5 Une erreur est survenue au cours de la lecture du fichier de modele. 6 Echec d'allocation memoire (pas assez de memoire disponible). 7 Il n'y a pas de ligne dans le fichier qui puisse etre mise en correspondance avec l'entree. 8 Parametres d'entree invalides. ENVIRONNEMENT DATEMSK Fichier contenant les motifs de formatage. TZ LC_TIME Variables utilisees par strptime(3). ATTRIBUTS Pour une explication des termes utilises dans cette section, consulter attributes(7). +------------+--------------------------+------------------------------+ |Interface | Attribut | Valeur | +------------+--------------------------+------------------------------+ |getdate() | Securite des threads | MT-Unsafe race:getdate env | | | | locale | +------------+--------------------------+------------------------------+ |getdate_r() | Securite des threads | MT-Safe env locale | +------------+--------------------------+------------------------------+ VERSIONS La specification POSIX.1 pour strptime(3) contient des specifications de conversion utilisant les modificateurs %E ou %O alors que de tels modificateurs ne sont pas indiques pour getdate(). Dans la glibc, getdate() est implementee avec strptime(3), si bien que les deux fonctions supportent exactement les memes conversions. STANDARDS POSIX.1-2008. HISTORIQUE POSIX.1-2001. EXEMPLES Le programme ci-dessous appelle getdate() pour chaque argument de la ligne de commande et affiche la valeur des champs de la structure tm renvoyee. 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 Source du programme #define _GNU_SOURCE #include #include #include 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("Echec de l'appel %zu ; getdate_err = %d\n", j, getdate_err); continue; } printf("Appel %zu (\"%s\") reussi :\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); } VOIR AUSSI time(2), localtime(3), setlocale(3), strftime(3), strptime(3) TRADUCTION La traduction francaise de cette page de manuel a ete creee par Christophe Blaess , Stephan Rafin , Thierry Vignaud , Francois Micaux, Alain Portal , Jean-Philippe Guerard , Jean-Luc Coulon (f5ibh) , Julien Cristau , Thomas Huriaux , Nicolas Francois , Florentin Duneau , Simon Paillard , Denis Barbier , David Prevot et Jean-Pierre Giraud Cette traduction est une documentation libre ; veuillez vous reporter a la GNU General Public License version 3 concernant les conditions de copie et de distribution. Il n'y a aucune RESPONSABILITE LEGALE. Si vous decouvrez un bogue dans la traduction de cette page de manuel, veuillez envoyer un message a . Pages du manuel de Linux 6.06 31 octobre 2023 getdate(3)