go - 为什么 time.In() 不能在时区 America/New_York 中得到正确的时间

标签 go timezone

这是我的代码

package main

import (
  "fmt"
  "time"
)

func main() {
  tz := "America/New_York"
  loc, err := time.LoadLocation(tz)
  if err != nil {
    fmt.Println(err)
  }

  fmt.Println(time.Now().In(loc))
}

它应该得到这样的结果 The Go Playground

2009-11-10 18:00:00 -0500 EST

奇怪的是,当它试图在我的服务器上运行时,它打印出 UTC 而不是 EST

2017-11-22 14:53:16.94672706 +0000 UTC

一些环境

go version go1.8.3 linux/amd64

Linux version 3.10.0-514.21.2.el7.x86_64 (mockbuild@x86-037.build.eng.bos.redhat.com) (gcc version 4.8.5 20150623 (Red Hat 4.8.5-11) (GCC) ) #1 SMP Sun May 28 17:08:21 EDT 2017

GOARCH="amd64"
GOBIN=""
GOEXE=""
GOHOSTARCH="amd64"
GOHOSTOS="linux"
GOOS="linux"
GOPATH="/root/go"
GORACE=""
GOROOT="/usr/local/go"
GOTOOLDIR="/usr/local/go/pkg/tool/linux_amd64"
GCCGO="gccgo"
CC="gcc"
GOGCCFLAGS="-fPIC -m64 -pthread -fmessage-length=0 -fdebug-prefix-map=/tmp/go-build674699918=/tmp/go-build -gno-record-gcc-switches"
CXX="g++"
CGO_ENABLED="1"
PKG_CONFIG="pkg-config"
CGO_CFLAGS="-g -O2"
CGO_CPPFLAGS=""
CGO_CXXFLAGS="-g -O2"
CGO_FFLAGS="-g -O2"
CGO_LDFLAGS="-g -O2"

最佳答案

原来是系统tzdata包过期了

sudo yum update tzdata

按照@Adrian 的建议,此命令解决了问题

关于go - 为什么 time.In() 不能在时区 America/New_York 中得到正确的时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47438031/

相关文章:

javascript - 格式化 Google Charts 日期时间轴标签的时区

mysql - 在 MySQL 中以美洲太平洋时区格式保存日期

go - 在go中按域查找IP地址

go - 这个函数在哪里返回非错误?

linux - 使用 golang 在 windows 和 linux 中捕获 ctrl+c 或任何其他进程终止信号

ios - 当前位置时区缩写

c++ - 时区问题 : `$ date -R` says `+0300` , 但 `timezone` 表示 `-7200`

java - 使用 Joda Time 获取时区偏移

validation - 验证结构的惯用方法

去正则表达式 : match three asterisks