Provided by: manpages-fr-dev_4.19.0-7_all bug

NOM

       strftime - Formater la date et l'heure

BIBLIOTHÈQUE

       Bibliothèque C standard (libc, -lc)

SYNOPSIS

       #include <time.h>

       size_t strftime(char s[restrict .max], size_t max,
                       const char *restrict format,
                       const struct tm *restrict tm);

       size_t strftime_l(char s[restrict .max], size_t max,
                       const char *restrict format,
                       const struct tm *restrict tm,
                       locale_t locale);

DESCRIPTION

       La  fonction  strftime()  formate  les  divers champs de la structure tm en fonction de la
       chaîne de spécification format, puis place le résultat dans la chaîne s de taille max.  Le
       détail de la structure tm est donné dans <time.h>. Consultez également ctime(3).

       La spécification de format est une chaîne terminée par l’octet NULL, qui peut contenir des
       séquences  de  caractères  spéciales  appelées  spécifications  de   conversion,   chacune
       commençant par un caractère « % » et se terminant par un autre caractère, appelé caractère
       spécificateur de conversion. Toutes les autres séquences de caractères sont des  séquences
       de caractères ordinaires.

       Les caractères des séquences de caractères ordinaires (y compris l'octet NULL) sont copiés
       tels quels depuis format dans s. Cependant, les caractères indicateurs de conversion  sont
       remplacés  comme  montré  dans la liste ci-dessous. Dans cette liste, le(s) champ(s) de la
       structure tm employés sont également détaillés.

       %a     Le nom abrégé du jour de la semaine  en  fonction  de  la  localisation  en  cours,
              déterminé par tm_wday. Les noms spécifiques utilisés par chaque locale peuvent être
              obtenus par un appel à nl_langinfo(3) avec ABDAY_{17} comme argument.

       %A     Le nom complet du jour de la semaine en  fonction  de  la  localisation  en  cours,
              déterminé  par  tm_wday.  Les  noms spécifiques utilisés la locale en cours peuvent
              être obtenus par un appel à nl_langinfo(3) avec DAY_{17} comme argument.

       %b     Le nom du mois abrégé en fonction  de  la  localisation  en  cours,  déterminé  par
              tm_mon. Les noms spécifiques utilisés par chaque locale peuvent être obtenus par un
              appel à nl_langinfo(3) avec ABMON_{112} comme argument.

       %B     Le nom complet du mois en fonction de  la  localisation  en  cours,  déterminé  par
              tm_mon. Les noms spécifiques utilisés par chaque locale peuvent être obtenus par un
              appel à nl_langinfo(3) avec MON_{112} comme argument.

       %c     La représentation usuelle de la date et de l'heure en fonction de  la  localisation
              en  cours.  Le formatage spécifique utilisé par la locale en cours peut être obtenu
              par un appel à nl_langinfo(3) avec D_T_FMT comme argument pour la spécification  de
              conversion  %c,  et  ERA_D_T_FMT  pour la spécification de conversion %Ec. Cela est
              équivalent pour la locale POSIX à %a %b %e %H:%M:%S %Y.

       %C     Le siècle (année/100) sous forme d'un nombre à deux chiffres, déterminé par tm_year
              (SU). L'indicateur de conversion %EC correspond au nom de l'ère.

       %d     Le  jour  du  mois  sous  forme  de  nombre  décimal, entre 01 et 31, déterminé par
              tm_mday.

       %D     Équivalent à %m/%d/%y. Uniquement pour les américains. Ces derniers  doivent  noter
              que  les  autres pays préfèrent le format %d/%m/%y. Dans un contexte international,
              ce format est ambigu et doit être évité. (SU)

       %e     Comme %d, le  jour  du  mois  sous  forme  décimale,  déterminé  par  tm_day,  mais
              l'éventuel zéro en tête est remplacé par une espace (SU).

       %E     Modificateur : utiliser un format de rechange. Voir plus bas (SU).

       %F     Équivalent à %Y-%m-%d, format de date ISO 8601 (C99).

       %G     L'année  ISO 8601  basée  sur  les  semaines  (voir la section NOTES) sous forme de
              nombre décimal, avec le siècle, déterminée par tm_year, tm_yday et tm_wday. L'année
              sur quatre chiffres correspondant au numéro de la semaine ISO (consultez %V). C'est
              le même format que %Y, sauf que si  le  numéro  de  semaine  appartient  à  l'année
              suivante ou précédente, c'est celle-ci qui est affichée à la place (TZ).

       %g     Comme  %G,  mais  sans  le  siècle,  c'est-à-dire  avec une année sur deux chiffres
              [0099], déterminée par tm_year, tm_yday et tm_wday (TZ).

       %h     Équivalent à %b (SU).

       %H     L'heure, sur 24 heures, sous forme de nombre décimal (entre 00 et  23),  déterminée
              par tm_hour.

       %I     L'heure,  sur  12 heures, sous forme de nombre décimal (entre 01 et 12), déterminée
              par tm_hour.

       %j     Le numéro du jour dans l'année (entre 001 et 366), déterminée par tm_day.

       %k     L'heure (sur 24 heures) sous forme de nombre décimal  (intervalle  0  à  23) ;  les
              chiffres  uniques étant précédés d'un blanc (voir aussi %H), déterminée par tm_hour
              (TZ).

       %l     L'heure (sur 12 heures) sous forme de nombre  décimal  (intervalle  1  à  12),  les
              chiffres  uniques étant précédés d'un blanc (voir aussi %I), déterminée par tm_hour
              (TZ).

       %m     Le numéro du mois (entre 01 et 12), déterminé par tm_mon.

       %M     La minute, sous forme de nombre décimal (de 00 à 59), déterminée par tm_min.

       %n     Un caractère de saut de ligne (SU).

       %O     Modificateur : utiliser des symboles numériques alternatifs. Voir plus bas (SU).

       %p     L'une des deux chaînes « AM » ou « PM » en  fonction  de  l'heure,  déterminée  par
              tm_hour,  ou  la traduction de ces chaînes en fonction de la localisation en cours.
              Midi est traité comme « PM » et minuit comme « AM ».  La  représentation  textuelle
              des  chaînes « AM » et « PM » spécifique à la locale en cours peut être obtenue par
              un appel à nl_langinfo(3) avec AM_STR ou PM_STR comme argument respectif.

       %P     Comme %p mais en minuscule : « am » ou « pm » ou  une  chaîne  locale  équivalente,
              déterminée par tm_hour (GNU).

       %r     L'heure  au  format  12  heures (SU). Le format utilisé par la locale courante peut
              être obtenu en appelant nl_langinfo(3) avec  T_FMT_AMPM  comme  argument.  Dans  la
              locale POSIX, cela est équivalent à %I:%M:%S %p.

       %R     L'heure au format 24 heures, %H:%M (SU). Pour avoir les secondes consultez %T.

       %s     Le  nombre  de  secondes écoulées depuis l'Époque, 1er janvier 1970 à 00:00:00 UTC,
              déterminé par mktime(tm) (TZ).

       %S     La seconde, sous forme de nombre décimal (entre 00  et  60),  l'intervalle  pouvant
              être  supérieur  à  60  pour  autoriser  des secondes de rattrapage, déterminée par
              tm_sec.

       %t     Un caractère de tabulation (SU).

       %T     L'heure en notation 24 heures, %H:%M:%S (SU).

       %u     Le jour de la semaine sous forme décimale, de 1 (lundi) à 7, déterminé par tm_wday.
              Consultez aussi %w (SU).

       %U     Le  numéro de la semaine dans l'année, sous forme de nombre décimal entre 00 et 53,
              en commençant le comptage au premier dimanche de l'année, déterminé par tm_yday  et
              tm_wday. Consultez aussi %V et %W.

       %V     Le  numéro  de  semaine  ISO 8601  (voir la section NOTES) de l'année en cours sous
              forme de nombre décimal entre 01 et 53, où la semaine 1 est la  première  ayant  au
              moins  4  jours  dans  l'année en cours, déterminé par tm_year, tm_yday et tm_wday.
              Consultez aussi %U et %W (SU).

       %w     Le numéro du jour de  la  semaine,  sous  forme  décimale  dans  l'intervalle  06,
              dimanche valant 0, déterminé par tm_wday. Consultez aussi %u.

       %W     Le  numéro  de  la  semaine  dans l'année, sous forme de nombre décimal (0053), en
              commençant avec le premier lundi comme premier jour de la semaine 01, déterminé par
              tm_yday et tm_wday.

       %x     La  représentation  usuelle  de  la  date  sans l'heure pour la locale en cours. Le
              format  spécifique  à  la  locale  en  cours  peut  être  obtenu  par  un  appel  à
              nl_langinfo(3)  avec  D_FMT  comme  argument  pour l'indicateur de conversion %x et
              ERA_D_FMT pour l'indicateur de conversion %Ex. Cela est équivalent à %m/%d/%y  dans
              la locale POSIX.

       %X     La  représentation  usuelle  de  l'heure  sans  la date pour la locale en cours. Le
              format  spécifique  à  la  locale  en  cours  peut  être  obtenu  par  un  appel  à
              nl_langinfo(3)  avec  T_FMT  comme  argument  pour l'indicateur de conversion %X et
              ERA_T_FMT pour l'indicateur de conversion %EX. Cela est équivalent à %H:%M:%S  dans
              la locale POSIX.

       %y     L'année,  sous  forme  de nombre décimal, sans le siècle (comprise entre 00 et 99),
              déterminée par tm_year. L'indicateur de conversion %Ey correspond à l'année  depuis
              le début de l'ère, désignée par l'indicateur de conversion %EC.

       %Y     L'année,  sous forme de nombre décimal, incluant le siècle, déterminée par tm_year.
              L'indicateur de conversion %EY correspond à la représentation alternative  complète
              d'une année.

       %z     Le fuseau horaire (c'est-à-dire le décalage en heures et minutes par rapport à UTC)
              sous forme numérique +hhmm ou -hhmm (SU).

       %Z     Le nom ou l'abréviation du fuseau horaire.

       %+     La date et l'heure au format date(1), non pris en charge par la glibc2 (TZ).

       %%     Un caractère « % ».

       Certaines spécifications de conversion peuvent  être  modifiées  en  faisant  précéder  le
       caractère  spécificateur  de conversion par le modificateur E ou O pour indiquer un format
       de rechange. Si le format de rechange n'existe pas  pour  la  localisation  en  cours,  le
       comportement  ne  sera  pas  modifié. Les spécifications Single UNIX (SU) mentionnent %Ec,
       %EC, %Ex, %EX, %Ey, %EY, %Od, %Oe, %OH, %OI, %Om, %OM, %OS, %Ou, %OU, %OV, %Ow, %OW,  %Oy,
       où  l'action  du  modificateur O est d'utiliser un autre format numérique (par exemple des
       chiffres romains), et l'action de E est d'utiliser une  représentation  dépendante  de  la
       localisation. Les règles encadrant la représentation des dates avec l'indicateur E peuvent
       être obtenues par un appel à nl_langinfo(3) avec ERA pour argument. Un exemple d'une telle
       forme  alternative  est  le schéma de calendrier d'ère japonais dans la locale ja_JP de la
       glibc.

       LA fonction  strftime_l()  est  équivalente  à  strftime(),  à  part  qu'elle  utilise  la
       localisation  locale  spécifiée  à  la  place  de  la locale en cours. Le comportement est
       indéfini si locale n'est pas valable ou est LC_GLOBAL_LOCALE.

VALEUR RENVOYÉE

       Si la taille de la chaîne de résultat ne dépasse pas max octets (octet NULL  compris),  la
       fonction  strftime()  renvoie  le  nombre  d'octets écrits dans le tableau s, sans compter
       l'octet NULL final. Si la longueur de la chaîne dépasse max octets (octet  NULL  compris),
       strftime() renvoie 0 et le contenu de la chaîne est indéfini.

       Remarquez  qu'une  valeur  de  retour  nulle  n'indique  pas  toujours une erreur. Dans de
       nombreuses localisations, par exemple, %p renvoie une chaîne vide. Une chaîne format  vide
       renvoie aussi une chaîne vide.

ENVIRONNEMENT

       Les variables d'environnement TZ et LC_TIME sont utilisées.

ATTRIBUTS

       Pour une explication des termes utilisés dans cette section, consulter attributes(7).

       ┌─────────────────────────────────────────────┬──────────────────────┬────────────────────┐
       │InterfaceAttributValeur             │
       ├─────────────────────────────────────────────┼──────────────────────┼────────────────────┤
       │strftime(), strftime_l()                     │ Sécurité des threads │ MT-Safe env locale │
       └─────────────────────────────────────────────┴──────────────────────┴────────────────────┘

STANDARDS

       strftime() : SVr4, C99.
       strftime_l() : POSIX.1-2008.

       Il  y  a  une  inclusion  stricte  entre les jeux de conversions fournies par ANSI C (sans
       marque), celles indiquées  par  les  Spécifications  Single  UNIX  (marquées  SU),  celles
       fournies  par  le  paquet  timezone d'Olson (marquées TZ), et celles de la glibc (marquées
       GNU), sauf pour %+ qui n'est pas pris en charge par la  glibc2.  D'un  autre  côté  glibc2
       offre plusieurs extensions. POSIX.1 ne traite que les conversions ANSI C. POSIX.2 décrit à
       propos de date(1) plusieurs extensions applicables également à strftime().  La  conversion
       %F est dans C99 et POSIX.1-2001.

       Dans  SUSv2,  le  %S  spécifié  permettait  un  intervalle  de  00 à 61, pour autoriser la
       possibilité théorique d'une minute incluant une double seconde de  rattrapage  (il  n'y  a
       jamais eu de telle minute).

NOTES

   Numéros des semaines ISO 8601
       %G, %g et %V produisent des valeurs calculées sur la base des semaines de l'année définies
       par la norme ISO 8601. Dans ce système, les semaines démarrent le lundi et sont numérotées
       de  01, pour la première semaine, jusqu'à 52 ou 53, pour la dernière semaine. La semaine 1
       est la première semaine pour laquelle au moins quatre jours  sont  dans  l'année  (ce  qui
       revient  au  même  que  de  la  définir comme la semaine du premier jeudi de l'année ou la
       semaine du 4 janvier). Quand trois jours, ou moins, se trouvent dans la  première  semaine
       calendaire  de  la  nouvelle  année  se  trouvent  dans  cette  année, alors le système de
       numérotation des semaines de l'ISO 8601 place ces jours  dans  la  semaine  52  ou  53  de
       l'année  précédente. Par exemple, le 1er janvier 2010 est un vendredi, ce qui signifie que
       seulement 3 jours se trouvent  dans  la  semaine  calendaire  du  début  2010.  l'ISO 8601
       considère donc ces jours comme faisant partie de la semaine 53 (%V) de l'année 2009 (%G) ;
       la semaine 01 de l'année 2010 pour l'ISO 8601 démarre le lundi 4 janvier  2010.  De  façon
       similaire,  les  deux  premiers  jours de janvier 2011 sont considérés comme étant dans la
       semaine 52 de l'année 2010.

   Notes de la glibc
       La glibc fournit des extensions pour les spécifications de conversion (ces  extensions  ne
       sont  pas  spécifiées  par  POSIX.1-2001  mais  quelques  autres  systèmes fournissent des
       fonctionnalités similaires). Entre le caractère « % » et  le  caractère  spécificateur  de
       conversion, on peut spécifier un attribut optionnel et un champ largeur (ceux-ci précèdent
       les modificateurs E ou 0 s'ils sont présents).

       Les caractères attributs suivants sont autorisés :

       _      (souligné) Compléter une chaîne de résultat numérique avec des espaces.

       -      (tiret) Ne pas compléter une chaîne de résultat numérique.

       0      Compléter une chaîne de résultat numérique avec des  zéros  même  si  le  caractère
              spécificateur de conversion utilise des espaces par défaut.

       ^      Convertir une chaîne alphabétique en une chaîne résultante en majuscule.

       #      Échanger  la  casse  de  la  chaîne  résultat  (cet  attribut ne fonctionne qu'avec
              certains caractères  spécificateurs  de  conversion,  et  parmi  ceux-ci  il  n'est
              vraiment utile qu'avec %Z).

       Un  spécificateur  de  largeur  décimal  optionnel  peut  suivre l'(éventuellement absent)
       attribut. Si la taille naturelle du champ est plus petite que  cette  largeur,  la  chaîne
       résultat sera alors complétée (sur la gauche) jusqu'à la largeur spécifiée.

BOGUES

       Si  la  chaîne  de  sortie  dépasse  max  octets,  errno n'est pas défini. Cela empêche de
       distinguer ce cas d'erreur des cas où la chaîne format  aurait  légitimement  produit  une
       chaîne  de  sortie de longueur nulle. POSIX.1-2001 ne spécifie aucun réglage de errno pour
       strftime().

       Certaines versions boguées de gcc(1) se plaignent de l'utilisation de %c : avertissement :
       `%c'  laisse  seulement  les  2 derniers chiffres de l'année dans certaines configurations
       linguistiques . Bien sûr, les programmeurs sont encouragés à utiliser %c, car  cela  donne
       la  représentation  préférée de date et d'heure. Il y a eu des tas d'astuces bizarres pour
       éviter ce problème  de  gcc(1).  Une  relativement  propre  est  d'utiliser  une  fonction
       intermédiaire

           size_t
           my_strftime(char *s, size_t max, const char *fmt,
                       const struct tm *tm)
           {
               return strftime(s, max, fmt, tm);
           }

       De nos jours, gcc(1) fournit une option -Wno-format-y2k pour éviter l'avertissement, et la
       solution de contournement ci-dessus n'est plus nécessaire.

EXEMPLES

       format de date compatible RFC 2822 (avec des paramètres régionaux en anglais  pour  %a  et
       %b)

           "%a, %d %b %Y %T %z"

       format de date compatible RFC 822 (avec des paramètres régionaux en anglais pour %a et %b)

           "%a, %d %b %y %T %z"

   Programme exemple
       Le programme suivant peut être utilisé pour expérimenter strftime().

       Voici  quelques exemples de la chaîne résultat produite par l'implémentation de strftime()
       dans la glibc :

           $ ./a.out '%m'
           La chaîne résultat est "11"
           $ ./a.out '%5m'
           La chaîne résultat est "00011"
           $ ./a.out '%_5m'
           La chaîne résultat est "   11"

   Source du programme

       #include <stdio.h>
       #include <stdlib.h>
       #include <time.h>

       int
       main(int argc, char *argv[])
       {
           char outstr[200];
           time_t t;
           struct tm *tmp;

           t = time(NULL);
           tmp = localtime(&t);
           if (tmp == NULL) {
               perror("localtime");
               exit(EXIT_FAILURE);
           }

           if (strftime(outstr, sizeof(outstr), argv[1], tmp) == 0) {
               fprintf(stderr, "strftime a renvoyé 0");
               exit(EXIT_FAILURE);
           }

           printf("Result string is \"%s\"\n", outstr);
           exit(EXIT_SUCCESS);
       }

VOIR AUSSI

       date(1), time(2), ctime(3), nl_langinfo(3), setlocale(3), sprintf(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>,   David   Prévot  <david@tilapin.org>  et  Grégoire  Scano
       <gregoire.scano@malloc.fr>

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