【发布时间】:2015-08-24 18:20:53
【问题描述】:
使用 Ubuntu 12.04
clientSendTimeHeaderFormat := "2006-01-02T15:04:05-0700"
ctx := "2015-04-01T10:04:00-0700"
clientSendTime, err := time.Parse(clientSendTimeHeaderFormat, ctx)
name, offset := clientSendTime.Zone()
在服务器上,名称返回空,而偏移量在 -25200 处是正确的。 clientSendTime 打印为“2015-04-01 10:04:00 -0700 -0700”。
在我的 Mac 上本地运行它会正确返回名称和偏移量。该名称返回正确的区域“PDT”。在本地,clientSendTime 打印为“2015-04-01 10:04:00 -0700 PDT”
我还在本地运行时从服务器复制了 /usr/share/zoneinfo 文件夹,以确保它不是由于其中的差异造成的。
有谁知道造成这些差异的原因是什么?
【问题讨论】:
-
你在哪个时区,你的服务器在哪个时区?
-
我在 PDT,服务器是 UTC
-
Jon Skeet describes why 但是,如果客户端的文本时间格式由您决定,您可以切换到使用带有时区名称而不是数字偏移量的格式(例如
time.RFC1123有“... MST”)来保留名称。否则,您只能使用偏移量,您应该只使用/依赖clientSendTime.Zone()的第二个返回值而不是名称(如果您使用命名区域格式重新格式化这些时间,您将只获得您的本地区域或像“-0700”这样的数字)。