strptime
Conversion d'une chaîne de date en une structure tm
- Provided by: manpages-fr-dev (Version: 3.65d1p1-1)
- Source: manpages-fr
- Report a bug
Conversion d'une chaîne de date en une structure tm
#define _XOPEN_SOURCE /* Consultez feature_test_macros(7)
*/
#include <time.h>
char *strptime(const char *buf, const char *format, struct tm *tm);
La fonction strptime() est complémentaire de la fonction strftime(3). 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.
Les champs de la structure tm définie dans <time.h> sont :
struct tm
{
int tm_sec; /* secondes [0,60] */
int tm_min; /* minutes [0,59] */
int tm_hour; /* heures [0,23] */
int tm_mday; /* jour du mois [1,31] */
int tm_mon; /* mois [0,11] */
int tm_year; /* année - 1900 */
int tm_wday; /* jour de la semaine [0,6] où Dimanche = 0 */
int tm_yday; /* jour de l'année [0,365] où 1er Jan = 0 */
int tm_isdst; /* décalage été/hiver */
};
Pour plus de détails sur la structure tm, consultez ctime(3).
Le paramètre format 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 le nom d’un jour de la semaine ou d’un 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.
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 :
Le modificateur O indique que les saisies numériques peuvent être effectuées dans un format différent, dépendant de la localisation.
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.
SUSv2, POSIX.1-2001.
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.
Avant la libc 5.4.13, les espaces (et les conversions « n » et « t ») n'étaient pas gérés ; les caractères de modification locale E et O n'étaient pas acceptés ; et la spécification « C » était un synonyme pour « c ».
La conversion « y » (année dans le siècle) 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.
Pour des raisons de symétrie, la glibc essaye d'offrir pour strptime() les mêmes caractères de formatage que ceux de strftime(3) (dans la plupart des cas, les champs sont lus mais aucun membre de tm n'est modifié). Ceci conduit à :
De même, à cause des extensions GNU de strftime(3), %k est accepté en synonyme de %H, et %l est accepté comme synonyme de %I, et %P en synonyme de %p. Enfin,
L'implémentation de la glibc n'impose pas la présence de caractères blancs entre deux descripteurs de champs.
L'exemple suivant montre l'utilisation de strptime() et strftime(3).
#define _XOPEN_SOURCE
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
int
main(void)
{
struct tm tm;
char buf[255];
memset(&tm, 0, sizeof(struct tm));
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);
exit(EXIT_SUCCESS);
}
Cette page fait partie de la publication 3.65 du projet man-pages Linux. Une description du projet et des instructions pour signaler des anomalies peuvent être trouvées à l'adresse http://www.kernel.org/doc/man-pages/.
Depuis 2010, cette traduction est maintenue à l'aide de l'outil po4a <http://po4a.alioth.debian.org/> par l'équipe de traduction francophone au sein du projet perkamon <http://perkamon.alioth.debian.org/>.
Christophe Blaess <http://www.blaess.fr/christophe/> (1996-2003), Alain Portal <http://manpagesfr.free.fr/> (2003-2006). Nicolas François et l'équipe francophone de traduction de Debian (2006-2009).
Veuillez signaler toute erreur de traduction en écrivant à <debian-l10n-french@lists.debian.org> ou 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> ».