getdate(3)

NOM
getdate, getdate_r - Conversion d'un temps sous forme de chaîne de caractères au format humain

BIBLIOTHÈQUE
Bibliothèque C standard (libc, -lc)

SYNOPSIS
#include <time.h>

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 fonctionnalités 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 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.

VALEUR RENVOYÉE
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.

ERREURS
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.

ENVIRONNEMENT

DATEMSK
    Fichier contenant les motifs de formatage.

TZ, LC_TIME
    Variables utilisées par strptime(3).

ATTRIBUTS
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

STANDARDS
POSIX.1-2001, POSIX.1-2008.

NOTES
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.

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 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

  Source du programme
    #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);
    }

VOIR AUSSI
time(2), localtime(3), setlocale(3), strftime(3), strptime(3)

TRADUCTION
La traduction française de cette page de manuel a été créée par Christophe Blaess <https://www.blaess.fr/christophe/>, Stéphan Rafin <stephan.rafin@laposte.net>, Thierry Vignaud <tvignaud@mandriva.com>, François Micaux, Alain Portal <aportal@univ-montp2.fr>, Jean-Philippe Guérard <fevrier@tigreraye.org>, Jean-Luc Coulon (f5ibh) <jean-luc.coulon@wanadoo.fr>, Julien Cristau <jcristau@debian.org>, Thomas Huriaux <thomas.huriaux@gmail.com>, Nicolas François <nicolas.francois@centraliens.net>, Florentin Duneau <fduneau@gmail.com>, Simon Paillard <simon.paillard@resel.enst-bretagne.fr>, Denis Barbier <barbier@debian.org> et David Prévot <david@tilapin.org>

Cette traduction est une documentation libre ; veuillez vous reporter à la GNU General Public License version 3 (https://www.gnu.org/licenses/gpl-3.0.html) 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 à debian-l10n-french@lists.debian.org.