Provided by: manpages-fr-dev_4.13-4_all bug

NOM

       strftime - Formater la date et l'heure

SYNOPSIS

       #include <time.h>

       size_t strftime(char *s, size_t max, const char *format,
                       const struct tm *tm);

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  par  chaque locale 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, généralement 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 example d'une telle forme alternative est le
       schéma de calendrier d'ère japonais dans la locale ja_JP de la glibc.

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() │ Sécurité des threads │ MT-Safe env locale │
       └────────────┴──────────────────────┴────────────────────┘

CONFORMITÉ

       SVr4,  C89,  C99.  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  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().

       Some  buggy  versions of gcc(1)  complain about the use of %c: warning: `%c' yields only last 2 digits of
       year in some locales. Of course programmers are encouraged to use %c, as it gives the preferred date  and
       time  representation.  One  meets all kinds of strange obfuscations to circumvent this gcc(1)  problem. A
       relatively clean one is to add an intermediate function

           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 <time.h>
       #include <stdio.h>
       #include <stdlib.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)

COLOPHON

       Cette page fait partie de la publication 5.10 du projet man-pages Linux. Une description du projet et des
       instructions  pour  signaler  des  anomalies et la dernière version de cette page peuvent être trouvées à
       l'adresse https://www.kernel.org/doc/man-pages/.

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

GNU                                               13 août 2020                                       STRFTIME(3)