Golang时区解析未在ubuntu服务器上返回正确的区域

Golang时区解析未在ubuntu服务器上返回正确的区域,ubuntu,time,go,timezone,Ubuntu,Time,Go,Timezone,使用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处是正确的。 clientS

使用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”。本地客户端发送时间打印为“2015-04-01 10:04:00-0700 PDT”

在本地运行时,我还从服务器上复制了/usr/share/zoneinfo文件夹,以确保这不是由于其中的差异造成的

有人知道是什么导致了这些差异吗?

好吧,所以我想我知道为什么会发生这种情况——但这不是一个很好的解决办法

报告说:

当解析具有区域偏移量(如-0700)的时间时,如果偏移量对应于当前位置(本地)使用的时区,则解析将在返回的时间中使用该位置和区域。否则,它会将时间记录为处于装配位置,时间固定在给定区域偏移处

由于您在太平洋时间,时区偏移量正好与您的位置匹配,因此它可以使用您的本地时区“名称”(ick;PDT实际上不是一个时区名称,但我们将把它放在一边)。当您的服务器解析它时,它必须创建位置-这就是您看到“-0700-0700”的原因


从根本上说,你不能仅仅从一个偏移量来确定时区-在同一时刻可能有多个具有相同偏移量的时区,因此你无法预测在任何其他时间原始时区中的偏移量。我建议您只记录您实际知道的信息,即偏移量,不要试图推断实际不存在的信息。

您所在的时区,以及您的服务器所在的时区?Im在PDT中,服务器是UTC,但如果客户端的文本时间格式由您决定,您可以切换到使用带有时区名称而不是数字偏移量的格式(例如,
time.RFC1123
具有“…MST”)来保留名称。否则,您只能使用偏移量,您应该只使用/依赖第二个返回值
clientSendTime.Zone()
,而不使用名称(如果在这种情况下使用命名区域格式重新格式化,您将只获得本地区域或数字,如“-0700”)。