noble (3) strftime.3.gz

Provided by: manpages-fr-dev_4.21.0-2_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⟩.