FreeToGenerate.com

Met une date en forme comme le fait strftime, et indique de quelle norme vient chaque jeton — la colonne que tous les aide-mémoire laissent tomber. Rien n’est envoyé.

Tout ce qui n’est pas une conversion est recopié tel quel. Chaque jeton ci-dessous est confronté à la norme dont il vient.

Essayez :
7 mars 2026

Jeton par jeton

JetonDéfini parProduit
%-dC897
%bC89mars
%YC892026

Les niveaux sont les marques de la page de manuel elle-même : ce qui n’est pas marqué relève d’ANSI C, le reste porte C99, SU, TZ ou GNU.

Ce qu’il faut savoir sur cette chaîne

  • %-d Un indicateur sans largeur minimale de champ. POSIX déclare le résultat non spécifié précisément dans ce cas : il veut la paire, donc %03d et non %0d. glibc accepte la forme seule, celle que recommandent tous les tutoriels, et c’est aussi pourquoi CPython sous Windows lève une ValueError sur %-d.

  • %-d Cet indicateur est une extension de glibc. POSIX en définit exactement deux : le zéro et le signe plus. Le tiret bas, le trait d’union, l’accent circonflexe et le croisillon appartiennent à glibc, et une bibliothèque C qui ne les implémente pas peut rejeter la chaîne entière au lieu d’ignorer l’indicateur.

  • %b La sortie dépend de la locale de la bibliothèque C : la même chaîne produit donc un texte différent sur une machine configurée autrement. Cette page la rend dans la langue où vous la lisez.

Les 42 conversions

ConversionDéfini parProduit
%alocaleC89sam.
%AlocaleC89samedi
%blocaleC89mars
%BlocaleC89mars
%clocaleC897 mars 2026, 09:05:03
%CSingle UNIX Specification20
%dC8907
%DSingle UNIX Specification03/07/26
%eSingle UNIX Specification 7
%FC992026-03-07
%GPaquet de fuseaux horaires d’Olson2026
%gPaquet de fuseaux horaires d’Olson26
%hSingle UNIX Specificationmars
%HC8909
%IC8909
%jC89066
%kPaquet de fuseaux horaires d’Olson 9
%lPaquet de fuseaux horaires d’Olson 9
%mC8903
%MC8905
%nSingle UNIX Specification
%plocaleC89AM
%Plocaleglibcam
%rlocaleSingle UNIX Specification09:05:03 AM
%RSingle UNIX Specification09:05
%sPaquet de fuseaux horaires d’Olson1772874303
%SC8903
%tSingle UNIX Specification
%TSingle UNIX Specification09:05:03
%uSingle UNIX Specification6
%UC8909
%VSingle UNIX Specification10
%wC896
%WC8909
%xlocaleC8907/03/2026
%XlocaleC8909:05:03
%yC8926
%YC892026
%zSingle UNIX Specification+0000
%ZlocaleC89UTC
%+Paquet de fuseaux horaires d’Olson%+
%%C89%

42 / 42 affichées

Ce que chacune produit pour la date ci-dessus, plutôt qu’une description, car la sortie est la réponse. Une ligne marquée dépend de la locale.

Tout ceci s’exécute dans votre navigateur. Rien n’est envoyé.

Aussi disponible en : English · Español · Português · العربية

Codes de format strftime : ce que produit chacun, et qui le définit

Saisissez une chaîne de format, lisez le résultat jeton par jeton, et découvrez lesquels de vos jetons ne survivront pas à un changement de plateforme.

Ce que sont les codes de format de strftime

strftime est la fonction de la bibliothèque C qui transforme une date en texte, et sa chaîne de format est une suite de caractères ordinaires entrecoupée de spécifications de conversion. Chacune est un signe pour cent suivi d’une lettre : %Y donne l’année sur quatre chiffres, %m le mois avec son zéro, %d le jour. Tout ce qui n’est pas une conversion est recopié tel quel, et c’est pourquoi %Y-%m-%d rend une date à tirets sans qu’on ait à le demander.

Le même langage se retrouve bien au-delà du C. Python, Ruby, PHP, R, Perl, awk, le date de GNU et le shell lui-même acceptent des chaînes strftime, et la plupart transmettent la vôtre directement à la bibliothèque C de la machine plutôt que de l’implémenter. C’est exactement pour cela que la portabilité est ici une vraie question et non une note de bas de page : les codes que votre programme accepte sont décidés par la machine qui l’exécute.

Il y a 42 conversions en tout, et elles ne viennent pas du même endroit. Certaines figurent dans la norme C de 1989, une est arrivée avec C99, douze viennent de la Single UNIX Specification, six du paquet de fuseaux horaires d’Olson — le projet même qui fournit la base des fuseaux — et une de glibc. Tous les aide-mémoire publiés aplatissent cela en une seule liste, ce qui est précisément l’information dont on a besoin quand une chaîne fonctionne sur son portable et pas en production.

Comment s’en servir

  1. Saisissez ou choisissez une chaîne de format. Les boutons d’exemple couvrent une date de tous les jours, une entièrement portable, une ligne de log Apache, la date de semaine ISO, et une composée à partir des deux véritables collisions de la syntaxe.
  2. Réglez la date et l’heure. Les deux sont lues en UTC, si bien que le résultat ne dépend que de ce que vous avez saisi. Le tableau de référence en bas se recalcule pour l’instant choisi, ce qui va généralement plus vite que de lire une description.
  3. Lisez le détail et les remarques. Chaque conversion est listée avec la norme qui la définit et ce qu’elle a produit. Les remarques en dessous couvrent ce qui mérite d’être su : un indicateur qui n’est pas POSIX, une conversion au-delà de C89, ou une sortie qui change avec la locale.

Où la portabilité casse vraiment, mesuré

Le réflexe est de croire que la ligne de danger est le niveau : restez en C89 et tout va bien, sortez vers la Single UNIX Specification et non. Mesurée sur deux implémentations, cette frontière ne mord presque plus. CPython sous Windows accepte les 22 conversions de C89 et les 12 de la Single UNIX Specification, %e, %F et %T comprises. Une page bâtie autour des marques de niveau décrirait une falaise largement érodée.

Ce qui casse, ce sont les indicateurs, un mécanisme distinct dont les marques de niveau ne disent rien. POSIX définit exactement deux indicateurs, le zéro et le signe plus, ainsi qu’une largeur minimale de champ — puis déclare le résultat non spécifié dès qu’un indicateur figure sans largeur minimale, ou une largeur sans indicateur. Même %0d sort donc de la norme : POSIX veut la paire, %03d. glibc, elle, définit cinq indicateurs — tiret bas, trait d’union, zéro, accent circonflexe et croisillon — et les accepte tous seuls.

Voilà pourquoi l’astuce strftime la plus recommandée d’internet est justement celle qui casse. %-d, pour supprimer le zéro de tête, est une extension de glibc sous une forme que POSIX qualifie de non spécifiée, et sous Windows CPython ne se dégrade pas en silence : il lève une ValueError. Idem pour %_d, %s, %P, %k et %l, auxquels GNU répond sans broncher.

Les modes de défaillance sont asymétriques, et c’est là l’essentiel à retenir. Windows échoue bruyamment sur %-d, ce qui agace mais se corrige de soi-même. Le contournement vers lequel on se tourne alors, %#d, est l’orthographe de Microsoft pour supprimer le zéro de tête — et glibc donne au même caractère un sens tout autre. Chez glibc, le croisillon signifie « casse inverse », ce qui ne fait strictement rien à un champ numérique : %#d revient donc en 07 et non en 7. Et l’indicateur n’est pas ignoré : %#A renvoie bien SATURDAY, ce qui prouve qu’il est traité. Un caractère, deux définitions, et aucune erreur d’un côté ni de l’autre.

Deux collisions dans la syntaxe, et une limite assumée

Le signe plus est à la fois un indicateur POSIX et une conversion que recense la page de manuel, à la même place. %+4Y est donc un indicateur avec largeur, tandis que %+ seul est une conversion signifiant la date au format de date(1). La page de manuel tranche la seconde d’une façon peu banale : elle recense la conversion, puis indique que glibc2 ne la prend pas en charge. Vérifié : le date de GNU renvoie les deux caractères inchangés, ce que fait aussi cette page.

L’autre collision oppose %G à %Y. %G est l’année à base de semaines d’ISO 8601, et elle diverge de l’année civile pendant quelques jours autour du Nouvel An. Le 1er janvier 2027 est un vendredi : il appartient donc à la semaine ISO 53 de 2026, si bien que %G-W%V donne 2026-W53 tandis que %Y-W%V donne 2027-W53 — une semaine qui n’existe pas, puisque 2027 n’en compte que 52. Sur les quarante années de 2000 à 2039, les deux divergent 68 jours sur 14 610, soit 0,47 pour cent : jamais plus de trois jours dans une même année, moins de deux en moyenne, et certaines années aucun. C’est la pire fréquence possible pour repérer un bogue.

La limite assumée, c’est la locale. Onze des 42 conversions produisent du texte que la bibliothèque C tire de la locale courante : les noms de jour et de mois, les marques du matin et de l’après-midi, et les trois qui rendent une date ou une heure entière selon l’usage local. Cette page les rend dans la langue où vous la lisez, ce qui est une réponse raisonnable et n’est pas celle que donnera votre serveur. Rien ici ne peut vous dire comment une machine configurée sur une autre locale rendra %c, et un outil qui prétendrait le contraire devinerait.

Deux points mineurs. Tout est mis en forme en UTC : %z vaut donc toujours +0000 et %Z toujours UTC, alors qu’un vrai programme met en forme dans le fuseau qu’on lui a passé. Et %s, les secondes depuis l’époque, relève du paquet de fuseaux horaires et d’aucune norme C, ce qui explique qu’elle soit l’une des conversions que Windows refuse d’emblée.

Pourquoi est-ce gratuit ?

Transformer une date en texte tient à de l’arithmétique et à une table de correspondance, et les deux s’exécutent dans votre navigateur. Aucun serveur n’intervient : il n’y a donc rien à facturer ni de compte à créer.

Rien n’est envoyé. Rechargez la page et elle aura oublié votre chaîne de format.