(Bearbeiten/update): Danke an @djd für den Hinweis, dass wir alle JSON/struct Dekodierung überspringen können; Das Schlüsselproblem ist mit time.Parse
.Golang leer Ort auf Mac OSX beim Parsen
Das gleiche Problem kommt hier, wo die Location
„leer“ ist eher als UTC (I UTC erwartet habe auf der Dokumentation basieren würde: https://golang.org/pkg/time/#Parse
„In Ermangelung einer Anzeige Zeitzone, Parse liefert eine . Zeit in UTC“
Hier ist der Beispielcode: https://play.golang.org/p/pb3eMbjSmv
package main
import (
"fmt"
"time"
)
func main() {
// Ignoring the err just for this example's sake!
parsed, _ := time.Parse(time.RFC3339, "2017-08-15T22:30:00+00:00")
fmt.Printf("String(): %v\n", parsed.String())
fmt.Printf("Location(): %v\n", parsed.Location())
}
die
ausgibtSo, während der Offset der time.Time
Location
scheint korrekt zu sein, ist seine Zeitzone Name nur eine leere Zeichenfolge. Auf anderen Computern (und The Go Playground) wird der erwartete "UTC" -Standort angezeigt.
[Original-Beitrag]:
Wenn ein Feld Zeitstempel Dekodieren von JSON in eine struct
auf meinem lokalen OS X-Maschine, die Location
des time.Time
Feld ist „leer“ statt UTC. Dies ist problematisch, wenn ich Komponententests lokal ausführe (im Gegensatz zu einem CI-Server, auf dem Location
korrekt auf UTC eingestellt ist).
Wenn ich das auf meinem Rechner laufen, sehe ich
go run main.go TimeField.String(): 2017-08-15 22:30:00 +0000 +0000 TimeField.Location():
So, während der Versatz der time.Time
‚s Location
scheint korrekt zu sein, dessen Name der Zeitzone nur eine leere Zeichenfolge ist. Dies geschieht mit Hilfe Go 1.5:
go version go version go1.5 darwin/amd64
Um zu vereinfachen, ist der 'json' Teil tatsächlich irrelevant: die UnmarshalJSON Methode ist nur ein Wrapper um time.Parse mit dem RFC3339 Format String: ' time.Parse (time.RFC3339, "2017-08-15T22: 30 : 00 + 00: 00 ")' – djd
Danke @djd, aktualisierte Beschreibung der Frage zu vereinfachen und einfach 'time.Parse' zu verwenden. – nrjones8
[Dieser Code] (https://golang.org/src/time/format.go#L1015) in 'time/format.go' scheint als könnte es ein wahrscheinlicher Täter sein, aber es erklärt nicht unbedingt warum Das Verhalten ist auf meinem lokalen Mac OS X-Computer anders als auf dem CI-Server, den wir verwenden (Linux) oder was auch immer Go Playground verwendet. – nrjones8