嗨,所以我似乎無法找到任何東西來幫助我解決這個問題。Golang - 日期解析YYYY-MM-DD日期
我使用的格式字符串 「2006年1月2日」 和時間字符串 「2016年7月8日」
然而,當我運行使用這些參數我得到的迴應的格式是7月7日,2016年。正確的迴應將是2016年7月8日。
作爲一個說明,我也試圖通過Sprig來使用它。
{{ date "January 02, 2006" .MyDate }}
如果我能得到它,將不勝感激
嗨,所以我似乎無法找到任何東西來幫助我解決這個問題。Golang - 日期解析YYYY-MM-DD日期
我使用的格式字符串 「2006年1月2日」 和時間字符串 「2016年7月8日」
然而,當我運行使用這些參數我得到的迴應的格式是7月7日,2016年。正確的迴應將是2016年7月8日。
作爲一個說明,我也試圖通過Sprig來使用它。
{{ date "January 02, 2006" .MyDate }}
如果我能得到它,將不勝感激
這是因爲時區的,你得到正確的日期,但sprig
格式「本地」在默認情況下,在golang.org/pkg/time
默認爲「UTC 「
下面是一個示例代碼:(爲簡單起見,省略錯誤處理)
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())
}
輸出:
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
下面是一些參考:
時間:https://golang.org/pkg/time
在不存在時區指示器的,解析返回一個UTC時間。
spig:https://github.com/Masterminds/sprig/blob/master/functions.go#L407
func date(fmt string, date interface{}) string {
return dateInZone(fmt, date, "Local")
}
注:如果你想格式化一個特定的時間段,看第二個模板:
utcTpl := `sprig: {{ dateInZone "January 02, 2006 (MST)" .MyDate "UTC"}} -- specify UTC time zone`
非常感謝。這是深入和有用的。由此解決了我的問題。結果代碼: {{dateInZone「2006年1月2日(MST)」.Date「UTC」}} 謝謝 - 我不知道如何標記您的問題爲答案思想:S。 – user1977351
太棒了,很高興我能幫到你。祝你好運:)我看到你已經標記了。謝謝。 – davidcv5
任何幫助,我認爲正確的方法是發送time.Time
類型的模板,然後使用Format
功能就可以了。您可以使用ParseTime
來解析您的2016-07-08
格式。
type Data struct {
CreatedOn time.Time
}
template.Execute(w, Data{})
模板:
<span>{{ .CreatedOn.Format "January 02, 2006" }}</span>
這可能是一個問題時區轉換爲UTC –