小编典典

在Go中将UTC转换为“本地”时间

go

如何将UTC时间转换为 当地时间

我已经为我需要当地时间的所有国家/地区创建了具有UTC时差的地图。然后,我将该差异作为持续时间添加到当前时间(UTC),并打印结果希望是该特定国家/地区的当地时间。

由于某些原因,结果是错误的。例如,在匈牙利,相差一小时。知道为什么我得到的结果不正确吗?

package main

import "fmt"
import "time"

func main() {

    m := make(map[string]string)
    m["Hungary"] = "+01.00h"

    offSet, err := time.ParseDuration(m["Hungary"])
    if err != nil {
        panic(err)
    }
    t := time.Now().UTC().Add(offSet)
    nice := t.Format("15:04")

    fmt.Println(nice)
}

阅读 853

收藏
2020-07-02

共1个答案

小编典典

请记住,操场的时间设置为2009-11-10 23:00:00 +0000 UTC,因此它正在工作。

正确的方法是使用time.LoadLocation,这是一个示例:

var countryTz = map[string]string{
    "Hungary": "Europe/Budapest",
    "Egypt":   "Africa/Cairo",
}

func timeIn(name string) time.Time {
    loc, err := time.LoadLocation(countryTz[name])
    if err != nil {
        panic(err)
    }
    return time.Now().In(loc)
}

func main() {
    utc := time.Now().UTC().Format("15:04")
    hun := timeIn("Hungary").Format("15:04")
    eg := timeIn("Egypt").Format("15:04")
    fmt.Println(utc, hun, eg)
}
2020-07-02