2016-10-22 1 views
0

Hallo, also kann ich nichts finden, um mir dabei zu helfen.Golang - Datum Parsing eines JJJJ-MM-DD Datums

Ich bin mit dem Format-String „2. Januar 2006“ und die Zeit Zeichenfolge „2016.07.08“

Allerdings, wenn ich ein Format mit diesen Parametern laufen die Antwort, die ich erhalten, ist 7. Juli , 2016. Die richtige Antwort wäre 8. Juli 2016.

Als eine Anmerkung, ich versuche auch, dies über Sprig zu verwenden.

{{ date "January 02, 2006" .MyDate }} 

Wenn ich keine Hilfe bekommen kann, wäre es viel

+0

Es ist ein Problem sein könnte, mit Zeitzone Konvertierung in UTC –

Antwort

1

es wegen der Zeitzone ist, sind Sie das richtige Datum bekommen, aber sprig Formate "Local" standardmäßig in dem golang.org/pkg/time standardmäßig „UTC "

Hier ist ein Beispielcode: (Fehlerbehandlung zur Vereinfachung weglassen)

func main() { 
    // using the "time" package 
    mydate, _ := time.Parse("2006-01-02", "2016-07-08") 
    fmt.Println("time:", mydate.In(time.Local).Format("January 02, 2006 (MST)"), "-- specify Local time zone") 
    fmt.Println("time:", mydate.Format("January 02, 2006 (MST)"), "-- defaults to UTC") 

    d := struct{ MyDate time.Time }{mydate} 

    //using sprig 
    fmap := sprig.TxtFuncMap() 
    localTpl := `sprig: {{ date "January 02, 2006 (MST)" .MyDate }} -- defaults to Local` 
    t := template.Must(template.New("test").Funcs(fmap).Parse(localTpl)) 
    var localdate bytes.Buffer 
    t.Execute(&localdate, d) 
    fmt.Println(localdate.String()) 

    utcTpl := `sprig: {{ dateInZone "January 02, 2006 (MST)" .MyDate "UTC"}} -- specify UTC time zone` 
    t = template.Must(template.New("test").Funcs(fmap).Parse(utcTpl)) 
    var utcdate bytes.Buffer 
    t.Execute(&utcdate, d) 
    fmt.Println(utcdate.String()) 

} 

Ausgang:

time: July 07, 2016 (EDT) -- specify Local time zone                     
time: July 08, 2016 (UTC) -- defaults to UTC                       
sprig: July 07, 2016 (EDT) -- defaults to Local                       
sprig: July 08, 2016 (UTC) -- specify UTC time zone 

Hier einige Referenz:

Zeit: https://golang.org/pkg/time

In Abwesenheit einer Anzeige Zeitzone, Parse liefert ein Zeit in UTC.

SPIG: https://github.com/Masterminds/sprig/blob/master/functions.go#L407

func date(fmt string, date interface{}) string { 
    return dateInZone(fmt, date, "Local") 
} 

Hinweis: wenn Sie wollen eine bestimmte Zeitzone zu formatieren, am 2. Vorlage aussehen:

utcTpl := `sprig: {{ dateInZone "January 02, 2006 (MST)" .MyDate "UTC"}} -- specify UTC time zone` 
+0

Vielen Dank. Dies war eingehend und nützlich. Sortierte mein Problem dadurch aus. Resultierender Code: {{dateInZone "02. Januar 2006 (MST)" .Date "UTC"}} Vielen Dank - Ich habe keine Ahnung, wie Sie Ihre Frage als die Antwort zu markieren gedacht: S. – user1977351

+0

Super, froh, dass ich helfen konnte. Viel Glück :) .. Ich sehe dich schon markiert .. Danke. – davidcv5

1

geschätzt werden denke ich, die richtige Art und Weise time.Time Art zu Ihrer Vorlage zu senden und dann Format Gebrauch der Funktion. Sie können ParseTime verwenden, um Ihr 2016-07-08 Format zu parsen.

type Data struct { 
    CreatedOn time.Time 
} 

template.Execute(w, Data{}) 

Vorlage:

<span>{{ .CreatedOn.Format "January 02, 2006" }}</span>