strptime(3) | Library Functions Manual | strptime(3) |
strptime - Conversion d'une chaîne de dates en une structure tm
Bibliothèque C standard (libc, -lc)
#define _XOPEN_SOURCE /* Consultez feature_test_macros(7) */ #include <time.h>
char *strptime(const char *restrict s, const char *restrict format, struct tm *restrict tm);
La fonction strptime() est l’inverse de la fonction strftime(3). Elle convertit la chaîne de caractères pointée par s en une valeur qui est stockée dans la structure tm (« représentation humaine ») pointée par l'argument tm, la conversion étant réalisée en suivant les indications contenues dans la chaîne format.
La structure de temps tm est décrite dans tm(type3).
Le paramètre format contient des descripteurs de champ et du texte, rappelant scanf(3). Chaque descripteur consiste en un caractère % suivi d'un second caractère indiquant la substitution pour le descripteur de champ. 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 champ.
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, format) 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 de 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 s 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 l’octet NULL en fin de chaîne. Si strptime() n'arrive pas à effectuer toutes les conversions, elle renvoie NULL.
Pour une explication des termes utilisés dans cette section, consulter attributes(7).
Interface | Attribut | Valeur |
strptime() | Sécurité des threads | MT-Safe env locale |
POSIX.1-2001, POSIX.1-2008, SUSv2.
En principe cette fonction n'initialise pas tm, mais n'y stocke que les valeurs lues. Cela 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 glibc 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é.
La conversion « y » (année dans le siècle) est toujours considérée comme appartenant à 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(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); }
time(2), getdate(3), scanf(3), setlocale(3), strftime(3)
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.
5 février 2023 | Pages du manuel de Linux 6.03 |