使用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文件夹,以确保它不是由于它的差异。
任何人都知道可能导致这些差异的原因是什么?
答案 0 :(得分:5)
好的,所以我想我知道为什么这种情况正在发生 - 但不是一个不错的解决方案。
当使用像-0700这样的区域偏移解析时间时,如果偏移对应于当前位置(本地)使用的时区,则Parse在返回的时间内使用该位置和区域。否则,它将时间记录在一个伪造的位置,时间固定在给定的区域偏移处。
当您在太平洋时间时,区域偏移 碰巧与您的位置匹配 - 因此它可以使用您当地的时区“名称”(ick; PDT实际上不是时区)名字,但我们会把它留给一边)。当您的服务器解析它时,它必须构建位置 - 这就是您看到“-0700 -0700”的原因。
从根本上说,您无法仅根据偏移确定时区 - 在同一时刻可能存在多个具有相同偏移的时区,因此您无法预测原始时间内的偏移量任何其他时间的区域。我建议您只记录您实际知道的内容 - 即偏移量 - 并且不要试图推断实际上不存在的信息。