À propos de cet outil
Un layout est un exemple, pas un motif
La plupart des langages décrivent un format de date avec des codes de format comme %Y-%m-%d ou YYYY-MM-DD. Go procède autrement : vous écrivez à quoi doit ressembler un instant précis, l'heure de référence, et time.Format affiche n'importe quelle autre heure de la même façon. L'heure de référence est Mon Jan 2 15:04:05 MST 2006.
Ses valeurs ont été choisies pour se suivre dans l'ordre américain 01/02 03:04:05PM '06 -0700 : mois 1, jour 2, heure 3 (ou 15 au format 24 h), minute 4, seconde 5, année 6 et décalage horaire de moins 7 heures. Chaque valeur ne peut désigner qu'une seule chose, et c'est ainsi que Go sait que 01 est un mois et 04 une minute.
Erreurs courantes
Comme 01 est le mois et 02 le jour, une date avec le jour en premier s'écrit 02/01/2006, ce qui semble faux à quiconque a l'habitude de l'ordre de référence. Un layout écrit selon d'autres habitudes n'échoue pas pour autant. Go affiche tel quel ce qu'il ne reconnaît pas, si bien que YYYY-MM-DD ressort inchangé, et il lit comme un token chaque chiffre qu'il reconnaît, si bien que 2021-12-25 ressort sous forme de nombres sans rapport.
Il est impossible d'échapper un token. Un texte qui en contient un est remplacé : un Jan, un Mon ou un chiffre comme 2 écrit littéralement dans un layout devient une valeur. Ajoutez plutôt ce texte en dehors du layout.
Z07:00 affiche Z pour UTC et un décalage numérique sinon, comme l'attend la RFC 3339, alors que -07:00 affiche toujours le nombre. Pour les fractions de seconde, .000 garde les zéros finaux et .999 les supprime. Les noms des mois et des jours sont toujours en anglais.
Fonctionnement de l'aperçu et de la conversion
L'aperçu est produit par la fonction time.Format de Go elle-même, compilée en WebAssembly et exécutée dans votre navigateur : il montre donc ce qu'un programme Go affiche pour le même instant et le même décalage. Votre navigateur fournit l'heure actuelle, le décalage UTC de votre fuseau horaire et son abréviation. Quand le navigateur n'a pas d'abréviation pour votre fuseau, une abréviation numérique comme +03 est utilisée, ce que Go affiche aussi pour les fuseaux qui n'ont pas d'abréviation en lettres. Pour certains fuseaux, l'abréviation du navigateur diffère de celle de la base de données des fuseaux horaires que lit Go.
Les deux formats ne couvrent pas exactement les mêmes besoins. strftime n'a aucune directive qui se comporte comme Z07:00, et Go n'a pas de token pour les numéros de semaine (%U, %W, %V), pour le jour de la semaine en chiffre (%u, %w) ni pour les secondes depuis l'epoch (%s). Le convertisseur copie ces éléments sans les modifier et les signale sous le champ. Il signale aussi le texte littéral d'un format strftime que Go lirait comme un token, car un layout ne peut pas le contenir.
Côté strftime, certaines directives sont des extensions que toutes les implémentations ne proposent pas : l'option qui supprime le remplissage (%-d), le décalage avec deux-points (%:z) et les directives de fraction %L, %f et %N. Consultez la documentation du langage vers lequel vous convertissez.