时间。Location() 返回为 "Local" 即使 /etc/localtime 是正确的



我想检索我的系统的时区位置

t = time.Now()
tzLoc = t.Location().String()

tzLoc作为CCD_ 1返回。

我已经检查了time包的源代码。根据源代码,如果未设置TZ,则引用/etc/localtime

未设置TZ环境变量,下面是我的系统上的/etc/localtime

lrwxrwxrwx. 1 root root 38 Jan 16 06:33 /etc/localtime -> ../usr/share/zoneinfo/America/New_York

理想情况下,time包应该返回America/New_York,但它仍然以Local的形式返回

如何将时区位置获取为"Local"0?

Golang行为是正确的,在更改TZ环境变量后,您应该能够看到您期望的结果。我已经在Golang docker容器中运行了它,它打印出America/Los_Angeles。在您的终端中,请重新定义您的时区,如下所示:

~$: export TZ=America/Los_Angeles

这也是一个Docker实现:

Dockerfile:

FROM golang:1.13.8-alpine3.11
RUN apk update
ENV GO111MODULE=on
WORKDIR /app
ENV TZ=America/Los_Angeles

你可以构建dockerfile并按照以下方式运行它:

~$: docker build -t stackquestion:1.0 .
~$: docker run --rm -it stackquestion:1.0 sh

时区.go

import (
"fmt"
"time"
)
func main() {
tzLoc := time.Now().Location().String()
fmt.Println(tzLoc)
}

当你运行代码时,你应该得到:

/app # go run timezone.go 
America/Los_Angeles

最新更新