当已知UTC时间和时间偏移量时,如何设置Go时间值的时区?

6

我有一个UTC时间和一个以秒为单位的时间偏移量,需要返回相应的Go时间值。

使用time.Unix()函数可以轻松实例化UTC时间值。但是,要设置时区,我需要确定时间位置。

当我了解UTC时间和时间偏移量时,如何找到时间位置?

1个回答

10

没有实际的入口来查找时区数据库,您无法知道时间的真实位置。如果您只想使用偏移量进行工作,可以使用time.FixedZone创建固定位置。

edt := time.FixedZone("EDT", -60*60*4)
t, _ := time.ParseInLocation("02 Jan 06 15:04", "15 Sep 17 14:55", edt)
fmt.Println(t)

// 2017-09-15 14:55:00 -0400 EDT

你可以选择指定一个不存在的区域名称,或者不指定任何名称,只要你使用的输出格式不需要这个名称。
minus4 := time.FixedZone("", -60*60*4)
t, _ = time.ParseInLocation("02 Jan 06 15:04", "15 Sep 17 14:55", minus4)
fmt.Println(t.Format(time.RFC3339))

// 2017-09-15T14:55:00-04:00

好的建议。问题是我不知道时区名称。 - chmike
@chmike:如果你不知道实际的时区名称,那么你只能猜测或者完全省略它。我只是用“EDT”作为一个例子,它并不是一个真正的时区。 - JimB
时区名称仅用于旧时间表示(RFC822,Unix时间)。更近期的时间表示仅使用时间偏移量。 - chmike
@chmike:是的,只要选择合适的输出格式,就可以将名称字段留空(如果格式要求,时间包将使用偏移量作为名称)。 - JimB
@chmike 这些是IANA TZ数据库中的时区名称。如果您需要更精确的方法,使用RFC3339时间戳可能是最方便的选择。 - Markus W Mahlberg
显示剩余4条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接