5 回答

TA貢獻1765條經驗 獲得超5個贊
對于 docker,解決方案是添加 tzdata 或等效包。這解決了使用 go 1.13 時的問題
http://pouzek.si/blog/go-loadlocation-docker/
FROM gliderlabs/alpine:3.3
RUN apk add --no-cache tzdata
COPY out/go-loadlocation-docker /go-loadlocation-docker
ENTRYPOINT ["/go-loadlocation-docker"]

TA貢獻1871條經驗 獲得超13個贊
這發生在我們身上,我們將zoneinfo.zip
文件與我們的程序捆綁在一起,因為我們需要在 Windows 服務器上運行它。我們將 ZONEINFO 環境變量設置為 .zip 文件的路徑,然后調用time.LoadLocation("America/Chicago")
. 在 1.12 版本中這很好。我們升級到1.13版本,遇到了“系統找不到指定的路徑”的問題。當調用 LoadLocation 時。
在我們的例子中,將 golang 存儲庫中的捆綁文件更新zoneinfo.zip
到最新版本解決了該問題。我們之前使用的版本來自 commit af3c48096
。不確定這是否與您遇到的問題相同,因為不清楚您是否像我們一樣部署該 zip 文件,但我想我會為遇到該問題的其他人提供幫助。
注意:這僅影響未安裝 Go 版本 1.13 的情況 - 當我在本地運行它時,一切都很好,因為它回退到 $GOROOT 文件夾中的版本(這是安裝 1.13 時更新的版本)。該錯誤發生在未安裝 Go 的 Windows 計算機上,如果我刪除了 $GOROOT\lib\time\zoneinfo.zip 文件,也會發生在本地。

TA貢獻1942條經驗 獲得超3個贊
如果您準確地傳遞Australia/Melbourne
給time.LoadLocation
,那么您應該檢查 zoneinfo 文件。
https://golang.org/pkg/time/#LoadLocation
該名稱被視為與 IANA 時區數據庫中的文件相對應的位置名稱。
LoadLocation 所需的時區數據庫可能并不存在于所有系統上,尤其是非 Unix 系統。LoadLocation 查找由 ZONEINFO 環境變量命名的目錄或未壓縮的 zip 文件(如果有),然后查找 Unix 系統上的已知安裝位置,最后查找 $GOROOT/lib/time/zoneinfo.zip。

TA貢獻1802條經驗 獲得超10個贊
導入time/tzdata將導致時區信息嵌入到程序中。因此,如果時間包在系統上找不到 tzdata 文件,它將使用此嵌入信息。
請記住,根據文檔:
導入此包將使程序大小增加約 450 KB。
示例代碼可能是這樣的:
package main
import (
? ? "fmt"
? ? "time"
? ? _ "time/tzdata"
)
func main() {
? ? tzloc, err := time.LoadLocation("Australia/Melbourne")
? ? if err != nil {
? ? ? ? panic(err)
? ? }
? ? fmt.Println(location)
}

TA貢獻1877條經驗 獲得超6個贊
使用 中的硬編碼時區字符串進行測試time.LoadLocation。我懷疑你的變量中可能有空格TimezoneName。
否則,LoadLocation 可以按照 Go1.13 中的預期正常工作。
package main
import (
? ? "fmt"
? ? "time"
)
func main() {
? ? location, err := time.LoadLocation("Australia/Melbourne")
? ? if err != nil {
? ? ? ? panic(err)
? ? }
? ? timeInUTC := time.Date(2018, 8, 30, 12, 0, 0, 0, time.UTC)
? ? fmt.Println(timeInUTC.In(location))
}
上面的代碼2018-08-30 22:00:00 +1000 AEST
作為 Go?Playground的輸出給出。Go Playground 使用 go 1.13。
但如果我在周圍留一個空格
location,?err?:=?time.LoadLocation("Australia/Melbourne?") if?err?!=?nil?{ ?????panic(err) }
它給出了您遇到的錯誤。
恐慌:未知時區 澳大利亞/墨爾本
- 5 回答
- 0 關注
- 235 瀏覽
添加回答
舉報