一尘不染

如何正确解析时区代码

go

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

阅读 292

收藏
2020-07-02

共1个答案

一尘不染

解析时间时,就是在您当前的位置进行解析,只要您期望的那样就可以,而且可以从您所在的位置知道时区缩写。

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

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

如果要处理源自其他时区的时间,则需要使用time.Location。您可以使用来从本地时区db加载Locations
time.LoadLocation,并使用来解析时间time.ParseInLocation

2020-07-02