這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。
前提
1、docker 空鏡像(或類似環境)
2、Go 應用中 使用了 loc, _ := time.LoadLocation("Asia/Chongqing")
問題
$ go run ./xxxpanic: time:missing Location in call to Time.In
原因
時間的位置資訊是從本地檔案系統中提取的,大多數系統都支援它,但還是取決於當前系統。具體的配置儲存路徑:
$ cd /usr/share/zoneinfo
進入該目錄就可以看到各時區的配置資訊
$ ls+VERSION Australia EET Factory Greenwich Jamaica Mexico Poland US posixrulesAfrica Brazil EST GB HST Japan NZ Portugal UTC zone.tabAmerica CET EST5EDT GB-Eire Hongkong Kwajalein NZ-CHAT ROC UniversalAntarctica CST6CDT Egypt GMT Iceland Libya Navajo ROK W-SUArctic Canada Eire GMT+0 Indian MET PRC Singapore WETAsia Chile Etc GMT-0 Iran MST PST8PDT Turkey ZuluAtlantic Cuba Europe GMT0 Israel MST7MDT Pacific UCT iso3166.tab
但在空鏡像(或類似的情境)中就不存在這些時區設定檔,程式引用時就會出現這個報錯
(準確來說,出現這個問題是因為本地系統不存在 Asia/Chongqing
的時區設定檔)
解決
安裝
$ apk add --no-cache tzdata
安裝這個包後,會在 /usr/share/zoneinfo
目錄下產生各時區的配置資訊
注意,如果沒有 timezone 、locatime 的配置,需要手動處理一下
最後
你知道 tzdata 是什麼嗎?簡單來講,它是時區資料庫(作為檔案和模組)
這個軟體包的目的是將標準時區資料庫分布在 cabal 軟體包中,以便它可以在所有平台上統一用於 Haskell 程式