fae*_*ons 5 time timezone parsing go
在下面的示例中,无论您为parseAndPrint函数选择的时区,结果始终为"[date] 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())
}
Run Code Online (Sandbox Code Playgroud)
当您解析时间时,您将在当前位置解析它,只要这是您期望的那样就可以了,并且您所在位置的时区缩写是已知的.
如果您可以放弃时区,那么将您处理的所有时间标准化为UTC要容易得多.
下一个最简单的方法是使用显式偏移来处理所有内容,例如-05:00
.
如果你想处理源自其他时区的时间,你需要使用time.Location
.您可以使用本地时区数据库加载位置time.LoadLocation
,并在其中解析时间time.ParseInLocation
.