Date création : 27-03-2008 20:23:44
 Vous êtes dans : GNU/Linux Astuces / Pages man [Section3 - Sous-fonctions]
STRPTIME
Index
- NOM
- SYNOPSIS
- DESCRIPTION
- VALEUR RENVOYÉE
- CONFORMITÉ
- EXEMPLE
- EXTENSIONS GNU
- NOTES
- VOIR AUSSI
- TRADUCTION
NOM
strptime - Conversion d'une chaîne de date en une structure tm.
SYNOPSIS
#define _XOPEN_SOURCE /* Pour glibc2 */
#include <time.h>
char *strptime (const char *buf, const char *format, struct
tm *tm);
DESCRIPTION
La fonction strptime() est complémentaire de la fonction
strftime(). Elle convertit la chaîne de caractères pointée par buf en
une valeur qui est stockée dans la structure tm pointée par l'argument
tm, la conversion étant réalisée en suivant les indications contenues
dans la chaîne format. Cette dernière contient des descripteurs de champs
et du texte, rappelant scanf(3). Chaque descripteur consiste en un
caractère % suivi d'un second caractère indiquant le champ à
interpréter. Tous les autres sont considérés comme du texte, qui doit être
présent dans la chaîne fournie en entrée. Toutefois un espace blanc se
trouvant dans la chaîne de format peut être mis en correspondance avec zéro
ou plusieurs espaces. Il devrait toujours y avoir un espace ou un autre
caractère alphanumérique entre deux descripteurs de champs.
La fonction strptime() traite la chaîne d'entrée de gauche à droite. Les
trois types d'éléments d'entrée possibles (espace, caractère littéral,
conversion) sont manipulés l'un après l'autre. Si l'entrée ne peut pas être
mise en correspondance avec la chaîne de format, la fonction s'arrête. Le
reste du format et de la chaîne d'entrée ne sont pas traités.
Les descripteurs applicables sont décrits ci-dessous. Dans le cas d'une
chaîne de caractères (comme un nom de jour ou de mois), la comparaison ne
tient pas compte des majuscules/minuscules. Dans le cas d'un nombre, les
zéros au début sont autorisés mais pas obligatoires.
- %%
-
Le caractère %
- %a ou %A
-
Le jour de la semaine en utilisant les noms correspondants à la
localisation. Les noms abrégés ou entiers peuvent être utilisés.
- %b ou %B ou %h
-
Le mois en utilisant les noms correspondants à la localisation. Les noms
abrégés ou entiers peuvent être utilisés.
- %c
-
La date et l'heure en utilisant le format de la localisation.
- %C
-
Le numéro de siècle (0-99).
- %d ou %e
-
Le jour du mois (1-31)
- %D
-
La date, ainsi : %m/%d/%y. C'est la date au format américain, très gênante
pour les autres pays, notamment l'Europe qui utilise une notation
%d/%m/%y. Le format standard ISO 8601 est %Y-%m-%d.
- %H
-
L'heure (0-23)
- %I
-
L'heure (0-12)
- %j
-
Le numéro du jour dans l'année (001-366)
- %m
-
Le numéro du mois (1-12)
- %M
-
La minute (0-59)
- %n
-
Un espace blanc quelconque
- %p
-
Équivalent local de AM ou PM (éventuellement rien).
- %r
-
L'heure sur 12 heures avec l'équivalent local de AM ou PM. Dans la
localisation POSIX, équivalent à %I:%M:%S %p. Si le champ t_fmt_ampm de
la catégorie LC_TIME de la localisation est vide, le comportement est
indéfini.
- %R
-
L'heure, ainsi : %H:%M
- %S
-
Les secondes (0-61, des secondes de rattrapages sont autorisées)
- %t
-
Un espace blanc quelconque
- %T
-
Équivalent de %H:%M:%S
- %U
-
Le numéro de semaine (0-53), le premier dimanche de janvier étant le premier
jour de la semaine 1.
- %w
-
Le numéro du jour dans la semaine (0-6), en commençant le dimanche.
- %W
-
Le numéro de semaine (0-53), le premier lundi de janvier étant le premier
jour de la semaine 1.
- %x
-
la date, en utilisant le format usuel de la localisation.
- %X
-
l'heure, en utilisant le format usuel de la localisation.
- %y
-
l'année sans le siècle (0-99; les zéros au début sont autorisés mais pas
obligatoires). Lorsque le siècle n'est pas indiqué par une autre conversion,
les années 69 à 99 sont considérées comme étant du vingtième siècle (1969 à
1999), et les années 00-68 du vingt-et-unième siècle (2000-2068).
- %Y
-
L'année en incluant le siècle (par exemple, 1996)
Certains descripteurs peuvent être complétés par les caractères
modificateurs E et O, indiquant qu'il faut employer un autre format ou une
autre spécification. Si cet autre format, ou cette autre conversion n'est
pas disponible dans la localisation en cours, le descripteur n'est pas
modifié.
Le modificateur E indique que la chaîne d'entrée peut contenir des versions
différentes de la date et l'heure, en fonction de la localisation :
- %Ec
-
Une représentation différente de la date et l'heure.
- %EC
-
Le nom de l'année de base (période) dans la représentation locale
alternative.
- %Ex
-
Une autre représentation de la date.
- %EX
-
Une autre représentation de l'heure.
- %Ey
-
Le décalage (en année) par rapport à l'année %EC dans la représentation
locale alternative.
- %EY
-
La représentation complète de l'année.
Le modificateur O indique que les saisies numériques peuvent être effectuées
dans un format différent, dépendant de la localisation.
- %Od or %Oe
-
Le jour du mois. Les zéros en tête sont permis mais pas obligatoires.
- %OH
-
L'heure (sur 24 heures).
- %OI
-
L'heure (sur 12 heures).
- %Om
-
Le numéro du mois.
- %OM
-
Les minutes.
- %OS
-
Les secondes.
- %OU
-
Le numéro de la semaine.
- %Ow
-
Numéro du jour dans la semaine, le dimanche étant zéro.
- %OW
-
Le numéro du jour de la semaine, en commençant le lundi.
- %Oy
-
L'année (ou décalage par rapport à %C).
Les champs de la structure tm définie dans <time.h> sont :
-
struct tm
{
int tm_sec; /* secondes */
int tm_min; /* minutes */
int tm_hour; /* heures */
int tm_mday; /* jour du mois */
int tm_mon; /* mois */
int tm_year; /* année */
int tm_wday; /* jour de la semaine */
int tm_yday; /* jour de l'année */
int tm_isdst; /* décalage été/hiver */
};
VALEUR RENVOYÉE
La fonction strptime() renvoie un pointeur sur le premier caractère de la
chaîne buf n'ayant pas été traité. Dans le cas où la chaîne de saisie est
plus longue que ce que réclame le format, la valeur renvoyée pointe juste
après le dernier caractère d'entrée ayant été analysé. Si toute la chaîne a
été traitée, le pointeur est dirigé sur le caractère NUL en fin de
chaîne. Si strptime() n'arrive pas à effectuer toutes les conversions, il
renvoie NULL.
CONFORMITÉ
SUSv2, POSIX.1-2001.
EXEMPLE
L'exemple suivant montre l'utilisation de strptime() et strftime().
#include <stdio.h>
#include <time.h>
int main()
{
struct tm tm;
char buf[255];
strptime("2001-11-12 18:31:01", "%Y-%m-%d %H:%M:%S", &tm);
strftime(buf, sizeof(buf), "%d %b %Y %H:%M", &tm);
puts(buf);
return 0;
}
EXTENSIONS GNU
Pour des raisons de symétrie, la glibc essaye d'offrir pour strptime()
les mêmes caractères de formatage que ceux de strftime() (dans la plupart
des cas, les champs sont lus mais aucun membre de tm n'est modifié). Ceci
conduit à :
- %F
-
Équivalent à %Y-%m-%d, le format ISO 8601 pour la date.
- %g
-
L'année correspondant au numéro de semaine ISO, sans le siècle (0-99).
- %G
-
L'année correspondant au numéro de semaine ISO (par exemple 1991).
- %u
-
Le numéro du jour de la semaine (1-7, lundi valant 1).
- %V
-
Le numéro de semaine ISO 8601:1988 (1-53). Si la semaine (commençant lundi)
contenant le 1er janvier a quatre jours ou plus de la nouvelle année, elle
est comptée en semaine 1. Sinon elle est considérée comme dernière semaine
de l'année précédente, et c'est la suivante qui est la semaine 1.
- %z
-
Spécification standard RFC-822/ISO 8601 pour le fuseau horaire.
- %Z
-
Le nom du fuseau horaire.
De même, à cause des extensions GNU de strftime(), %k est accepté en
synonyme de %H, et %l est accepté comme synonyme de %I, et %P en synonyme de
%p. Enfin,
- %s
-
Le nombre de secondes depuis le 1er janvier 1970 à Oh TU. Les secondes de
rattrapage ne sont pas comptées sauf si un support spécifique est
disponible.
L'implémentation de la glibc n'impose pas la présence de caractères blancs
entre deux descripteurs de champs.
NOTES
En principe cette fonction n'initialise pas tm, mais n'y stocke que les
valeurs lues. Ceci signifie que le contenu de tm doit être initialisé
avant l'appel. Les détails diffèrent suivant les systèmes
Unix. L'implémentation de la bibliothèque C Gnu ne modifie pas les champs
non mentionnés explicitement, sauf tm_wday, et tm_yday qui sont
recalculés si un champ d'année, de mois ou de jour est modifié.
Cette fonction n'est disponible que dans les versions de bibliothèque depuis
la 4.6.8. Les bibliothèques Linux libc4 et libc5 incluaient toujours le
prototype de cette fonction, la bibliothèque glibc 2 ne fournit le prototype
que si les constantes _XOPEN_SOURCE ou _GNU_SOURCE sont définies.
Les caractères de modification locale E et O sont acceptés depuis la
bibliothèque 5.4.13.
La conversion « y » est toujours considérée comme appartenant au vingtième
siècle dans les libc4 et libc5. Elle est prise dans l'intervalle 1950-2049
par la glibc 2.0, et 1969-2068 par la glibc 2.1.
VOIR AUSSI
time(2), getdate(3), scanf(3), setlocale(3), strftime(3)
TRADUCTION
Cette page de manuel a été traduite et mise à jour par
Christophe Blaess <http://www.blaess.fr/christophe/> entre 1996 et 2003,
puis par Alain Portal <aportal AT univ-montp2 DOT fr> jusqu'en 2006.
La traduction de cette page de manuel est basée sur les traductions
disponibles sur http://manpagesfr.free.fr/,
mais est gérée par l'équipe francophone de traduction de Debian
au travers de la liste de discussion debian-l10n-french.
Veuillez signaler toute erreur de traduction par un rapport de bogue sur
le paquet manpages-fr.
Vous pouvez toujours avoir accès à la version anglaise de ce document en
utilisant la commande
« man -L C <section> <page_de_man> ».
|