strftime
Section: C Library Functions (3)
Updated: 5 février 2023
Index
Return to Main Contents
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).
The format specification is a null-terminated string and may contain special
character sequences called conversion specifications, each of which is
introduced by a '%' character and terminated by some other character
known as a conversion specifier character. All other character sequences
are ordinary character sequences.
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
-
The abbreviated name of the day of the week according to the current
locale. (Calculated from tm_wday.) (The specific names used in the
current locale can be obtained by calling nl_langinfo(3) with
ABDAY_{1-7} as an argument.)
- %A
-
The full name of the day of the week according to the current locale.
(Calculated from tm_wday.) (The specific names used in the current
locale can be obtained by calling nl_langinfo(3) with
DAY_{1-7} as an argument.)
- %b
-
The abbreviated month name according to the current locale. (Calculated
from tm_mon.) (The specific names used in the current locale can be
obtained by calling nl_langinfo(3) with ABMON_{1-12} as an
argument.)
- %B
-
The full month name according to the current locale. (Calculated from
tm_mon.) (The specific names used in the current locale can be obtained
by calling nl_langinfo(3) with MON_{1-12} as an 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
-
Equivalent to %m/%d/%y. (Yecch---for Americans only. Americans should
note that in other countries %d/%m/%y is rather common. This means that
in international context this format is ambiguous and should not be used.)
(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
-
Like %G, but without century, that is, with a 2-digit year
(00-99). (TZ) (Calculated from tm_year, tm_yday, and tm_wday.)
- %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
0−6, 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
(00−53), 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).
- %%
-
A literal '%' character.
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.
strftime_l() is equivalent to strftime(), except it uses the
specified locale instead of the current locale. The behaviour is
undefined if locale is invalid or 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).
Interface | Attribut | Valeur
|
strftime(),
strftime_l()
| Sécurité des threads | MT-Safe env locale
|
STANDARDS
strftime(): SVr4, C99.
strftime_l(): POSIX.1-2008.
There are strict inclusions between the set of conversions given in ANSI C
(unmarked), those given in the Single UNIX Specification (marked SU), those
given in Olson's timezone package (marked TZ), and those given in glibc
(marked GNU), except that %+ is not supported in glibc2. On the other
hand glibc2 has several more extensions. POSIX.1 only refers to ANSI C;
POSIX.2 describes under date(1) several extensions that could apply to
strftime() as well. The %F conversion is in C99 and 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
glibc provides some extensions for conversion specifications. (These
extensions are not specified in POSIX.1-2001, but a few other systems
provide similar features.) Between the '%' character and the
conversion specifier character, an optional flag and field width may
be specified. (These precede the E or O modifiers, if present.)
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.
- ha
-
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
RFC~2822-compliant date format (with an English locale for %a and %b)
"%a, %d %b %Y %T %z"
RFC~822-compliant date format (with an English locale for %a and %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'
Result string is "11"
$ ./a.out '%5m'
Result string is "00011"
$ ./a.out '%_5m'
Result string is " 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
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 à
Index
- NOM
-
- BIBLIOTHÈQUE
-
- SYNOPSIS
-
- DESCRIPTION
-
- VALEUR RENVOYÉE
-
- ENVIRONNEMENT
-
- ATTRIBUTS
-
- STANDARDS
-
- NOTES
-
- Numéros des semaines ISO 8601
-
- Notes de la glibc
-
- BOGUES
-
- EXEMPLES
-
- Programme exemple
-
- Source du programme
-
- VOIR AUSSI
-
- TRADUCTION
-
This document was created by
man2html,
using the manual pages.
Time: 06:01:49 GMT, May 23, 2024