在下面的示例中,无论您为parseAndPrint函数选择的时区如何,结果始终为“ [日期] 05:00:00 +0000 UTC”。此代码有什么问题?时间应根据您选择的时区而变化。(Go Playground服务器显然是在UTC时区中配置的)。
http://play.golang.org/p/wP207BWYEd
package main import ( "fmt" "time" ) func main() { now := time.Now() parseAndPrint(now, "BRT") parseAndPrint(now, "EDT") parseAndPrint(now, "UTC") } func parseAndPrint(now time.Time, timezone string) { test, err := time.Parse("15:04:05 MST", fmt.Sprintf("05:00:00 %s", timezone)) if err != nil { fmt.Println(err) return } test = time.Date( now.Year(), now.Month(), now.Day(), test.Hour(), test.Minute(), test.Second(), test.Nanosecond(), test.Location(), ) fmt.Println(test.UTC()) }
解析时间时,就是在您当前的位置进行解析,只要您期望的那样就可以,而且可以从您所在的位置知道时区缩写。
如果您可以放弃时区,那么将您处理UTC的所有时间标准化就容易得多。
下一个最简单的方法是处理带有显式偏移量的所有内容,例如-05:00。
-05:00
如果要处理源自其他时区的时间,则需要使用time.Location。您可以使用来从本地时区db加载Locations time.LoadLocation,并使用来解析时间time.ParseInLocation。
time.Location
time.LoadLocation
time.ParseInLocation