panic: time: missing Location in call to Time.In

前提

一、docker 空镜像(或相似环境)docker

二、Go 应用中 使用了 loc, _ := time.LoadLocation("Asia/Chongqing")数据库

问题

$ go run ./xxx

panic: time:missing Location in call to Time.In

缘由

时间的位置信息是从本地文件系统中提取的,大多数系统都支持它,但仍是取决于当前系统。具体的配置存储路径:code

$ cd /usr/share/zoneinfo

进入该目录就能够看到各时区的配置信息ci

$ ls
+VERSION    Australia   EET         Factory     Greenwich   Jamaica     Mexico      Poland      US          posixrules
Africa      Brazil      EST         GB          HST         Japan       NZ          Portugal    UTC         zone.tab
America     CET         EST5EDT     GB-Eire     Hongkong    Kwajalein   NZ-CHAT     ROC         Universal
Antarctica  CST6CDT     Egypt       GMT         Iceland     Libya       Navajo      ROK         W-SU
Arctic      Canada      Eire        GMT+0       Indian      MET         PRC         Singapore   WET
Asia        Chile       Etc         GMT-0       Iran        MST         PST8PDT     Turkey      Zulu
Atlantic    Cuba        Europe      GMT0        Israel      MST7MDT     Pacific     UCT         iso3166.tab

但在空镜像(或相似的场景)中就不存在这些时区配置文件,程序引用时就会出现这个报错io

(准确来讲,出现这个问题是由于本地系统不存在 Asia/Chongqing 的时区配置文件)软件

解决

安装

$ apk add --no-cache tzdata

安装这个包后,会在 /usr/share/zoneinfo 目录下生成各时区的配置信息配置

注意,若是没有 timezone 、locatime 的配置,须要手动处理一下rsa

最后

你知道 tzdata 是什么吗?简单来说,它是时区数据库(做为文件和模块)引用

这个软件包的目的是将标准时区数据库分布在 cabal 软件包中,以便它能够在全部平台上统一用于 Haskell 程序程序

相关文章
相关标签/搜索