J'ai essayé d'analyser la chaîne de date "2014-09-12T11:45:26.371Z"
dans Go.
Code
layout := "2014-09-12T11:45:26.371Z"
str := "2014-11-12T11:45:26.371Z"
t, err := time.Parse(layout , str)
J'ai eu cette erreur:
heure d'analyse "2014-11-12T11: 47: 39.489Z": mois hors limites
Comment puis-je analyser cette chaîne de date?
2006-01-02T15:04:05.000Z
due à un standard fouRéponses:
Utilisez les numéros de mise en page exacts décrits ici et un joli article de blog ici .
alors:
donne:
Je connais. Esprit ahurissant. M'a également attrapé la première fois. Go n'utilise simplement pas de syntaxe abstraite pour les composants datetime (
YYYY-MM-DD
), mais ces nombres exacts (je pense que l'heure du premier commit de goNope, d'après cela . Est-ce que quelqu'un le sait?).la source
La mise en page à utiliser est en effet "
2006-01-02T15:04:05.000Z
" décrite dans la réponse de RickyA . Ce n'est pas "l'heure du premier commit de go", mais plutôt un moyen mnémotechnique de se souvenir de ladite mise en page. Voir pkg / heure :(1, 2, 3, 4, 5, 6, 7, à condition que vous vous souveniez que 1 est pour le mois, et 2 pour le jour, ce qui n'est pas facile pour un Européen comme moi, habitué au format de date jour-mois)
Comme illustré dans " time.parse: pourquoi golang analyse-t-il l'heure de manière incorrecte? ", Cette disposition (en utilisant 1,2,3,4,5,6,7) doit être respectée exactement .
la source
strftime
FTW.Comme réponse, mais pour économiser la saisie
"2006-01-02T15:04:05.000Z"
pour la mise en page, vous pouvez utiliser la constante RFC3339 du package .https://play.golang.org/p/Dgu2ZvHwTh
la source
2006-01-02T15:04:05.000Z
et mentionnent que Gotime.RFC3339
fonctionnerait également. Maistime.RFC3339 = "2006-01-02T15:04:05Z07:00"
. Ces deux formats sont-ils exactement équivalents dans la mesure où que feronttime.Parse
ettime.ParseInLocation
feront?Je suggérerai d'utiliser la constante time.RFC3339 du package time. Vous pouvez vérifier d'autres constantes du package de temps. https://golang.org/pkg/time/#pkg-constants
la source
C'est plutôt tard pour la fête, et je ne dis pas vraiment quoi que ce soit qui n'ait déjà été dit sous une forme ou une autre, principalement via les liens ci-dessus, mais je voulais donner un récapitulatif TL; DR à ceux qui ont moins d'attention:
La date et l'heure de la chaîne de format aller sont très importantes. C'est ainsi que Go sait quel champ est quel champ. Ils sont généralement 1-9 de gauche à droite comme suit:
Donc, n'écrivez pas "01-05-15" comme format de date, sauf si vous voulez "Mois-Seconde-Heure"
(... encore une fois, c'était essentiellement un résumé de ce qui précède.)
la source
Cela peut être très tard, mais c'est pour les personnes qui pourraient tomber sur ce problème et pourraient vouloir utiliser un package externe pour analyser la chaîne de date.
J'ai essayé de chercher une bibliothèque et j'ai trouvé celle-ci:
https://github.com/araddon/dateparse
Exemple du README:
la source
Si vous avez travaillé avec le formatage / l'analyse de l'heure / date dans d'autres langues, vous avez peut-être remarqué que les autres langues utilisent des espaces réservés spéciaux pour le formatage de l'heure / date. Par exemple, le langage ruby utilise
etc. Golang, au lieu d'utiliser des codes comme ci-dessus, utilise des espaces réservés au format de date et d'heure qui ressemblent à la date et à l'heure uniquement. Go utilise l'heure standard, qui est:
Donc, si vous remarquez que Go utilise
Par conséquent, par exemple pour l'analyse du 29/01/2020, la chaîne de mise en page doit être 06-01-02 ou 2006-01-02.
Vous pouvez vous référer au tableau de disposition complet des espaces réservés à ce lien - https://golangbyexample.com/parse-time-in-golang/
la source