time.Location () возвращается как "Local", даже если / etc / localtime верен - PullRequest
0 голосов
/ 14 марта 2020

Я хочу получить местоположение моей системы в часовом поясе

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

tzLo c возвращается как "Local".

Я проверил исходный код пакета 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

Что я должен сделать, чтобы получить местоположение часового пояса как America/New_York?

1 Ответ

0 голосов
/ 14 марта 2020

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...