Ich habe versucht, die Datumszeichenfolge "2014-09-12T11:45:26.371Z"
in Go zu analysieren .
Code
layout := "2014-09-12T11:45:26.371Z"
str := "2014-11-12T11:45:26.371Z"
t, err := time.Parse(layout , str)
Ich habe diesen Fehler erhalten:
Analysezeit "2014-11-12T11: 47: 39.489Z": Monat außerhalb des Bereichs
Wie kann ich diese Datumszeichenfolge analysieren?
2006-01-02T15:04:05.000Z
auf einen verrückten Standard zurückzuführen seinAntworten:
Verwenden Sie die hier beschriebenen genauen Layoutnummern und einen schönen Blogpost hier .
so:
gibt:
Ich weiß. Verblüffend. Hat mich auch zum ersten Mal erwischt. Gehen Sie einfach nicht eine abstrakte Syntax für Datetime - Komponenten verwenden (
YYYY-MM-DD
), aber diese genauen Zahlen (ich denke , die Zeit von der ersten go begehenNein, nach diesem . Wer weiß?).quelle
Das Layout zu verwenden ist in der Tat „
2006-01-02T15:04:05.000Z
“ beschrieben in RickyA ‚s Antwort .Es ist nicht "die Zeit des ersten Commits von go", sondern eine mnemonische Art, sich an das Layout zu erinnern.
Siehe pkg / time :
(1,2,3,4,5,6,7, vorausgesetzt Sie erinnern sich, dass 1 für den Monat und 2 für den Tag ist, was für einen Europäer wie mich nicht einfach ist und an das Tag-Monat-Datumsformat gewöhnt ist)
Wie in dargestellt „ time.parse: warum tut golang falsch die Zeit analysiert? “, Das Layout (mit 1,2,3,4,5,6,7) müssen beachtet werden genau .
quelle
strftime
FTW.Wie beantwortet, aber um das Eingeben
"2006-01-02T15:04:05.000Z"
für das Layout zu sparen , können Sie die Konstante RFC3339 des Pakets verwenden .https://play.golang.org/p/Dgu2ZvHwTh
quelle
2006-01-02T15:04:05.000Z
und erwähnen, dass Go'stime.RFC3339
auch funktionieren würde. Abertime.RFC3339 = "2006-01-02T15:04:05Z07:00"
. Sind diese beiden Formate insofern genau gleichwertig, als wastime.Parse
und wastime.ParseInLocation
sie tun werden?Ich werde vorschlagen, die Konstante time.RFC3339 aus dem Zeitpaket zu verwenden. Sie können andere Konstanten aus dem Zeitpaket überprüfen. https://golang.org/pkg/time/#pkg-constants
quelle
Dies ist ziemlich spät für die Party und sagt nicht wirklich etwas, was noch nicht in der einen oder anderen Form gesagt wurde, meistens über die obigen Links, aber ich wollte denjenigen mit weniger Aufmerksamkeitsspanne eine TL; DR-Zusammenfassung geben:
Das Datum und die Uhrzeit der Go-Format-Zeichenfolge sind sehr wichtig. So weiß Go, welches Feld welches ist. Sie sind in der Regel 1-9 von links nach rechts wie folgt:
Schreiben Sie also nicht "01-05-15" als Datumsformat, es sei denn, Sie möchten "Monat-Sekunde-Stunde".
(... wieder war dies im Grunde eine Zusammenfassung von oben.)
quelle
Dies kann sehr spät sein, ist jedoch für Personen gedacht, die über dieses Problem stolpern und möglicherweise ein externes Paket zum Parsen von Datumszeichenfolgen verwenden möchten.
Ich habe versucht, nach einer Bibliothek zu suchen, und ich habe diese gefunden:
https://github.com/araddon/dateparse
Beispiel aus der README:
quelle
Wenn Sie mit der Formatierung / Analyse von Uhrzeit / Datum in anderen Sprachen gearbeitet haben, haben Sie möglicherweise bemerkt, dass die anderen Sprachen spezielle Platzhalter für die Formatierung von Uhrzeit / Datum verwenden. Zum Beispiel für die Verwendung von Rubin
usw. Golang verwendet anstelle von Codes wie oben Platzhalter für das Datums- und Uhrzeitformat, die nur wie Datum und Uhrzeit aussehen. Go verwendet die Standardzeit:
Also, wenn Sie bemerken, dass Go verwendet
Daher sollte zum Beispiel für das Parsen des 29.01.2018 die Layoutzeichenfolge 06-01-02 oder 2006-01-02 sein.
Sie können auf die vollständige Platzhalter-Layout-Tabelle unter diesem Link verweisen - https://golangbyexample.com/parse-time-in-golang/
quelle