time - 在 Go 中将 UTC 转换为 "local"时间

标签 time go timezone timezone-offset

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

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

由于某些原因,结果是错误的。例如 Hungary有一个小时的差异。知道为什么我得到不正确的结果吗?

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)
}

最佳答案

请记住, Playground 的时间设置为 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)
}

关于time - 在 Go 中将 UTC 转换为 "local"时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25318154/

相关文章:

java - 如何仅从提供的小时数计算 Java 中的耗时

.net - 如何确定当前文化/语言环境是使用 am/pm 还是 24 小时时间?

testing - 在 goroutine 中使用 Gock 和 HTTP 调用时的数据竞争

go - 在golang的不同位置初始化不同的 map 值

java - 时区格式,如何知道时区

php - 如何检查时间/日期冲突 (PHP/MySQL)

go - 如何在 Go 中从 http 重写/重定向到 https?

django - date_format Django 1.4 具有正确的时区

python - Django 。显示正确的时间 - 取决于时区

r - 将 chr "00:00:00"转换为日期时间 "00:00:00"