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

目前,我知道我们可以执行以下操作:

1
2
3
4
5
6
7
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名称被视为与IANA时区数据库中的文件相对应的位置名称,例如" America / New_York"。

如果给定国家名称或GMT偏移量(例如,印度为+530),是否有更简单的方法来获取当前时间?

  • 在某些情况下,使用固定偏移量是合适的,但通常最好使用ContinentCity。 时区和夏令时规则是政治性的,并且是变化的。 使用ContinentCity将允许您的应用程序在基础IANA时区数据库更新时适应这些更改。 它还将为您节省日光。

1
2
3
4
5
//init the loc
loc, _ := time.LoadLocation("Asia/Shanghai")

//set timezone,  
now := time.Now().In(loc)
  • 我想你的意思是现在:= time.Now()。In(loc)
  • 位置时区信息是从系统中获取的,因此有可能找不到位置字符串。 如果找不到该位置,则二进制文件将崩溃,因此请确保处理此错误。

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

FixedZone returns a Location that always uses the given zone name and
offset (seconds east of UTC).

  • 谢谢Fabrizio! 我也想支持夏令时。 有什么建议吗?
  • 我不知道定义自定义夏令时设置,但是数据库中的时区已经支持夏令时。