2015-09-15 2 views
6

dieses Beispiel vor:Warum kann die von den bereitgestellten Formaten dargestellte Zeit nicht analysiert werden?

package main 

import (
    "fmt" 
    "time" 
) 

func main() { 
    fmt.Println(time.Parse(time.RFC3339, time.RFC3339)) 
} 

Die Ausgabe lautet:

0001-01-01 00:00:00 +0000 UTC parsing time "2006-01-02T15:04:05Z07:00": extra text: 07:00 

Warum kann ein Layout als Wert nicht time.Parse() umgehen? Was fehlt hier?


UPDATE: den Zeitzonenwert Abschneiden (aber nicht die 'Z' die Zeit aus der Zone abgrenzt) fixiert es:

fmt.Println(time.Parse(time.RFC3339, "2015-09-15T11:50:00Z")) 

Warum kann time.Parse() Handle Zeitzone Informationen bei der Verwendung von time.RFC3339 als Layout-String?

http://play.golang.org/p/p3fHfJNHVK


UPDATE: JimB Antwort führte mich von RFC3339 zu lesen und ich fand diese Beispiele, die weiter verdeutlichen:

Hier sind einige Beispiele von Internet-Datum/Uhrzeit.

1985-04-12T23:20:50.52Z

Dies entspricht 20 Minuten und 50,52 Sekunden nach der 23. Stunde des 12. April 1985 in UTC.

1996-12-19T16:39:57-08:00

Dies entspricht 39 Minuten und 57 Sekunden nach dem 16. Stunde 19. Dezember 1996 mit einem Versatz von -08: 00 von UTC (Pacific Standard Time). Beachten Sie, dass dies 1996-12-20T00:39:57Z in UTC entspricht.

+1

Ist es hilfreich? https://github.com/golang/go/issues/9346 –

+0

Ja, das war hilfreich. Vielen Dank! – mdwhatcott

Antwort

10

Das time.RFC3339 Format ist ein Fall, in dem die Formatzeichenfolge selbst keine gültige Zeit ist. Sie können keinen Zund keinen Offset in der Zeitzeichenfolge haben, aber die Formatzeichenfolge hat beide, weil die Spezifikation beide Arten der Zeitzonenspezifikation enthalten kann.

Beide sind gültig RFC3339 Zeiten:

"2015-09-15T14:00:12-00:00" 
"2015-09-15T14:00:13Z" 

Und die Zeit Paket muss in der Lage sein, sie beide mit dem gleichen RFC3339 Format-String zu analysieren.

Verwandte Themen