如何正确解析时区代码

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)

Jim*_*imB 9

当您解析时间时,您将在当前位置解析它,只要这是您期望的那样就可以了,并且您所在位置的时区缩写是已知的.

如果您可以放弃时区,那么将您处理的所有时间标准化为UTC要容易得多.

下一个最简单的方法是使用显式偏移来处理所有内容,例如-05:00.

如果你想处理源自其他时区的时间,你需要使用time.Location.您可以使用本地时区数据库加载位置time.LoadLocation,并在其中解析时间time.ParseInLocation.