如何正确解析时区代码

在下面的示例中,无论您为 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())

}


慕村225694
浏览 218回答 2
2回答

慕尼黑的夜晚无繁华

当您解析时间时,您是在当前位置解析它,只要这是您所期望的就可以了,并且时区缩写在您所在的位置是已知的。如果您可以放弃时区,那么将您处理的所有时间都标准化为 UTC 会容易得多。下一个最简单的方法是处理带有显式偏移量的所有内容,例如-05:00.如果要处理源自其他时区的时间,则需要使用time.Location. 您可以使用 加载本地时区数据库中的位置time.LoadLocation,并使用 解析时间time.ParseInLocation。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go