我需要获取不同时区的当前时间。
目前,我知道我们可以执行以下操作:
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创建自定义
FixedZone returns a Location that always uses the given zone name and
offset (seconds east of UTC).
- 谢谢Fabrizio! 我也想支持夏令时。 有什么建议吗?
- 我不知道定义自定义夏令时设置,但是数据库中的时区已经支持夏令时。