Provided by:
manpages-fr-dev_3.32d0.2p4-1_all 
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 chaine de specification format, puis place le resultat
dans la chaine s de taille max.
La specification de format est une chaine terminee par un caractere
nul, qui peut contenir des sequences de caracteres speciales appelees
sp'ecifications de conversion, chacune commence par un character
<< % >>, et se termine par un autre caractere, appele caract`ere
sp'ecificateur de conversion. Toutes les autres sequences de caracteres
sont des s'equences de caract`eres ordinaires.
Les caracteres des sequences de caracteres ordinaires (y compris le
caractere nul) sont copies tels quels depuis format dans s. Cependant,
les caracteres specificateurs de conversion sont remplaces comme suit :
%a Le nom abrege du jour de la semaine, en fonction de la
localisation en cours.
%A Le nom complet du jour de la semaine, en fonction de la
localisation en cours.
%b Le nom abrege du mois, en fonction de la localisation en cours.
%B Le nom complet du mois, en fonction de la localisation en cours.
%c La representation classique de la date et de l'heure, suivant la
localisation en cours.
%C Le siecle (annee/100) sous forme de nombre de deux chiffres.
(SU)
%d Le quantieme du mois sous forme de nombre decimal (entre 01 et
31).
%D Equivalent a %m/%d/%y. Seulement pour les americains. Ces
derniers doivent noter que les autres pays preferent le format
%d/%m/%y. Dans un contexte international, ce format est ambigu
et doit etre evite. (SU)
%e Comme %d, le quantieme du mois sous forme decimal, mais
l'eventuel zero en tete est remplace par un espace. (SU)
%E Modificateur : utiliser un format de rechange. Voir plus bas.
(SU)
%F Equivalent a %Y-%m-%d (format de date ISO 8601). (C99)
%G L'annee ISO 8601 basee sur les semaines (voir la section NOTES)
sous forme de nombre decimal, avec le siecle. L'annee sur quatre
chiffres correspondant au numero de la semaine ISO (consultez
%V). C'est le meme format que %Y, sauf que si le numero de
semaine appartient a l'annee suivante ou precedente, c'est
celle-ci qui est affichee a la place. (TZ)
%g Comme %G sans le siecle, c'est-a-dire avec une annee sur deux
chiffres (00-99). (TZ)
%h Equivalent a %b. (SU)
%H L'heure, sur 24 heures, sous forme de nombre decimal (entre 00
et 23).
%I L'heure, sur 12 heures, sous forme de nombre decimal (entre 01
et 12).
%j Le numero du jour dans l'annee (entre 001 et 366).
%k L'heure (sur 24 heures) sous forme de nombre decimal (intervalle
0 a 23). Les chiffres uniques sont precedes d'un blanc (voir
aussi %H). (TZ).
%l L'heure (sur 12 heures) sous forme de nombre decimal (intervalle
1 a 12). Les chiffres uniques sont precedes d'un blanc (voir
aussi %I). (TZ).
%m Le numero du mois (entre 01 et 12).
%M La minute, sous forme de nombre decimal (00 a 59).
%n Un caractere saut-de-ligne. (SU)
%O Modificateur : utiliser un format de rechange. Voir plus bas.
(SU)
%p L'une des deux chaines << AM >> ou << PM >> en fonction de
l'heure, ou la traduction de ces chaines en fonctions de la
localisation en cours. Midi est traite comme << PM >> et minuit
comme << AM >>.
%P Comme %p mais en minuscule: << am >> ou << pm >> ou une chaine
locale equivalente. (GNU)
%r L'heure en notation a.m. ou p.m. Dans la localisation POSIX,
c'est equivalent a %I:%M:%S %p. (SU)
%R L'heure en format 24 heures (%H:%M). (SU). Pour avoir les
secondes consultez %T.
%s Le nombre de secondes ecoulees depuis l'epoque, 1er janvier 1970
a 00:00:00 UTC. (TZ).
%S La seconde, sous forme de nombre decimal (00-60). L'intervalle
peut etre superieur a 60 pour autoriser des secondes de
rattrapage.
%t Un caractere de tabulation. (SU)
%T L'heure en notation 24 heures (%H:%M:%S). (SU)
%u Le jour de la semaine sous forme decimal, de 1 (lundi) a 7.
Consultez aussi %w. (SU)
%U Le numero de la semaine dans l'annee, sous forme de nombre
decimal (00-53), en commencant le comptage au premier dimanche
de l'annee. Consultez aussi %V et %W.
%V Le numero de semaine ISO 8601 (voir la section NOTES) de l'annee
en cours sous forme de nombre decimal dans l'intervalle 01-53,
ou la semaine 1 est la premiere ayant au moins 4 jours dans
l'annee en cours. Consultez aussi %U et %W. (SU)
%w Le numero du jour de la semaine, sous forme decimale (0-6),
dimanche valant 0. Consultez aussi %u.
%W Le numero de la semaine dans l'annee, sous forme de nombre
decimal (00-53), en commencant le comptage au premier lundi de
l'annee.
%x La representation usuelle de la date, sans l'heure, dans la
localisation en cours.
%X La representation usuelle de l'heure, sans la date, dans la
localisation en cours.
%y L'annee, sous forme de nombre decimal, sans le siecle (entre 00
et 99).
%Y L'annee, sous forme de nombre decimal, incluant le siecle.
%z Le fuseau horaire (c'est-a-dire le decalage en heures et minutes
par rapport a UTC) sous forme numerique +hhmm ou -hhmm. (SU)
%Z Le nom ou l'abreviation du fuseau horaire.
%+ La date et l'heure au format date(1). (TZ) (Non supporte par la
glibc2)
%% Un caractere << % >>.
Certaines specifications de conversion peuvent etre modifiees en
faisant preceder le caractere specificateur 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 modifie. Les specifications Single UNIX mentionnent %Ec,
%EC, %Ex, %EX, %Ey, %EY, %Od, %Oe, %OH, %OI, %Om, %OM, %OS, %Ou, %OU,
%OV, %Ow, %OW, %Oy, ou l'action du modificateur O est d'utiliser un
autre format numerique (par exemple des chiffres romains), et l'action
de E est d'utiliser une representation dependant de la localisation.
Les champs de la structure tm sont definis dans <time.h>. Consultez
aussi ctime(3).
VALEUR RENVOY'EE
La fonction strftime() renvoie le nombre de caracteres ecrits dans le
tableau s, sans compter l'octet nul final. Si la chaine etait trop
courte, strftime() renvoie 0, et le contenu de la chaine est indefini
(ce comportement est valable depuis au moins la libc 4.4.4, des
versions plus anciennes de la libc, comme la 4.4.1, renvoyaient max si
la chaine etait trop courte).
Remarquez qu'une valeur de retour nulle n'indique pas toujours une
erreur. Dans de nombreuses localisations, par exemple, %p renvoie une
chaine vide.
ENVIRONNEMENT
Les variables d'environnement TZ et LC_TIME sont utilisees.
CONFORMIT'E
SVr4, C89, C99. Il y a une inclusion stricte entre les jeux de
conversions fournies par C ANSI (sans marque), celles indiquees par les
Specifications Single UNIX (marquees SU), celles fournies par le paquet
timezone d'Olson (marquees TZ), et celles de la glibc (marquees GNU),
sauf pour %+ qui n'est pas supporte par glibc2. D'un autre cote glibc2
offre plusieurs extensions. POSIX.1 ne traite que les conversions C
ANSI. POSIX.2 decrit a propos de date(1) plusieurs extensions
applicables egalement a strftime(). La conversion %F est dans C99 et
POSIX.1-2001.
Dans SUSv2, le %S specifie permettait un intervalle de 00 a 61, pour
autoriser la possibilite theorique d'une minute incluant une double
seconde de rattrapage (il n'y a jamais eu de telle minute).
NOTES
Num'eros des semaines ISO 8601
%G, %g et %V produisent des valeurs calculees sur la base des semaines
de l'annee definies par la norme ISO 8601. Dans ce systeme, les
semaines demarrent le lundi et sont numerotees de 01, pour la premiere
semaine, jusqu'a 52 ou 53, pour la derniere semaine. La semaine 1 est
la premiere semaine pour laquelle au moins quatre jours sont dans
l'annee (ce qui revient au meme que de la definir comme la semaine du
premier jeudi de l'annee ou la semaine du 4 janvier). Quand trois
jours, ou moins, se trouvent dans la premiere semaine calendaire de la
nouvelle annee se trouvent dans cette annee, alors le systeme de
numerotation des semaines de l'ISO 8601 place ces jours dans la semaine
53 de l'annee precedente. Par exemple, le 1er janvier 2010 est un
vendredi, ce qui signifie que seulement 3 jours se trouvent dans la
semaine calendaire du debut 2010. l'ISO 8601 considere donc ces jours
comme faisant partie de la semaine 53 (%V) de l'annee 2009 (%G) ; la
semaine 01 de l'annee 2010 pour l'ISO 8601 demarre le lundi 4 janvier
2010.
Notes sur la glibc
La glibc fournit des extensions pour les specifications de conversion
(ces extensions ne sont pas specifiees par POSIX.1-2001 mais quelques
autres systemes fournissent des fonctionnalites similaires). Entre le
caractere << % >> et le caractere specificateur de conversion, on peut
specifier un attribut optionnel et un champ largeur (ceux-ci precedent
les modificateurs E ou 0 s'ils sont presents).
Les caracteres attributs suivants sont autorises :
_ (souligne) Completer une chaine de resultat numerique avec des
espaces.
- (tiret) Ne pas completer une chaine de resultat numerique.
0 Completer une chaine de resultat numerique avec des zeros meme
si le caractere specificateur de conversion utilise des espaces
par defaut.
^ Convertir une chaine alphabetique en une chaine resultante en
majuscule.
# Echanger la casse de la chaine resultat (cet attribut ne
fonctionne qu'avec certains caracteres specificateurs de
conversion, et parmi ceux-ci, il n'est vraiment utile qu'avec
%Z).
Un specificateur de largeur decimal optionnel peut suivre
l'(eventuellement absent) attribut. Si la taille naturelle du champ est
plus petite que cette largeur, la chaine resultat sera alors completee
(sur la gauche) jusqu'a la largeur specifiee.
BOGUES
Certaines versions boguees de gcc se plaignent de l'utilisation de %c :
warning: `%c' yields only last 2 digits of year in some locales
(Attention : ne donne que les deux derniers chiffres de l'annee dans
certaines localisations). Bien sur, les programmeurs sont encourages a
utiliser %c, cela donne la representation preferee de date et d'heure.
Il y a eu des tas d'astuces bizarres pour eviter ce probleme de gcc(1).
Une relativement propre est d'utiliser une fonction intermediaire :
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 eviter
l'avertissement, et la solution de contournement ci-dessus n'est plus
necessaire.
EXEMPLES
format de date compatible RFC 2822 (avec des parametres regionaux en
anglais pour %a et %b)
"%a, %d %b %Y %T %z"
format de date compatible RFC 822 (avec des parametres regionaux en
anglais pour %a et %b)
"%a, %d %b %y %T %z"
Programme exemple
Le programme suivant peut etre utilise pour experimenter strftime().
Voici quelques exemples de la chaine resultat produite par
l'implementation glibc de strftime() :
$ ./a.out '%m'
La chaine resultat est "11"
$ ./a.out '%5m'
La chaine resultat est "00011"
$ ./a.out '%_5m'
La chaine resultat est " 11"
Voici le 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 renvoye 0");
exit(EXIT_FAILURE);
}
printf("Result string is \"%s\"\n", outstr);
exit(EXIT_SUCCESS);
}
VOIR AUSSI
date(1), time(2), ctime(3), setlocale(3), sprintf(3), strptime(3)
COLOPHON
Cette page fait partie de la publication 3.32 du projet man-pages
Linux. Une description du projet et des instructions pour signaler des
anomalies peuvent etre trouvees a l'adresse
<URL:http://www.kernel.org/doc/man-pages/>.
TRADUCTION
Depuis 2010, cette traduction est maintenue a l'aide de l'outil po4a
<URL:http://po4a.alioth.debian.org/> par l'equipe de traduction
francophone au sein du projet perkamon
<URL:http://perkamon.alioth.debian.org/>.
Christophe Blaess <URL:http://www.blaess.fr/christophe/> (1996-2003),
Alain Portal <URL:http://manpagesfr.free.fr/> (2003-2006). Nicolas
Francois et l'equipe francophone de traduction de Debian (2006-2009).
Veuillez signaler toute erreur de traduction en ecrivant a
<debian-l10n-french@lists.debian.org> ou par un rapport de bogue sur le
paquet manpages-fr.
Vous pouvez toujours avoir acces a la version anglaise de ce document
en utilisant la commande << man -L C <section> <page_de_man> >>.