如何得到 Golang 其他时区的当前时间戳?

我需要不同时区的当前时间。

目前我知道我们可以做到以下几点:

t := time.Now()
fmt.Println("Location:", t.Location(), ":Time:", t)
utc, err := time.LoadLocation("America/New_York")
if err != nil {
fmt.Println("err: ", err.Error())
}
fmt.Println("Location:", utc, ":Time:", t.In(utc))

LoadLocation 名称被认为是一个位置名称,对应于时区信息数据库中的一个文件,比如“ America/New _ york”。

有没有一个更简单的方法来得到当前的时间,如果国家名称,或格林尼治标准时间偏移给予例如印度 + 530?

编辑: 我也想支持日光节约。

93392 次浏览

不,这是最好的方法。您可以使用 固定地带创建自定义 Location并使用该自定义位置。

FixedZone 返回一个始终使用给定区域名称和 偏移量(协调世界时以东秒)。

//init the loc
loc, _ := time.LoadLocation("Asia/Shanghai")


//set timezone,
now := time.Now().In(loc)

我喜欢 这边

//init the loc
loc, _ := time.LoadLocation("Asia/Shanghai")


//set timezone,
now := time.Now().In(loc)

我在哪里可以找到位置的名称?

你可以在 Zoneinfo.zip上看到

举个例子

package _test


import (
"fmt"
"testing"
"time"
)


func TestTime(t *testing.T) {
myT := time.Date(2022, 4, 28, 14, 0, 0, 0, time.UTC)
for _, d := range []struct {
name     string
expected string
}{
{"UTC", "2022-04-28 14:00:00 +0000 UTC"},
{"America/Los_Angeles", "2022-04-28 07:00:00 -0700 PDT"},
{"Asia/Tokyo", "2022-04-28 23:00:00 +0900 JST"},
{"Asia/Taipei", "2022-04-28 22:00:00 +0800 CST"},
{"Asia/Hong_Kong", "2022-04-28 22:00:00 +0800 HKT"},
{"Asia/Shanghai", "2022-04-28 22:00:00 +0800 CST"},
} {
loc, _ := time.LoadLocation(d.name)
if val := fmt.Sprintf("%s", myT.In(loc)); val != d.expected {
fmt.Println(val)
t.FailNow()
}
}
}