tzdata 数据库究竟是如何使用的?

Mar*_*tin 10 clock

不同的操作系统似乎以不同的方式处理夏令时 (DST)。我真的很喜欢 Cisco IOS 方法,它非常简单,可以更改 DST 开始和结束的日期和时间。例如:

clock summer-time EDT recurring 2 Sun Mar 2:00 1 Sun Nov 2:00 60
Run Code Online (Sandbox Code Playgroud)

..在 3 月第二周的星期日 2:00 将时钟提前 60 分钟,并在 11 月第一个星期日的 2:00 将时钟向后移动 60 分钟。Linux 如何处理夏令时?我知道有一个tzdata包含时区数据文件的包,这些文件安装到/usr/share/zoneinfo/目录中。这些文件是如何以及由哪些实用程序使用的?我可以在文件中看到 UTC(2) 和时区名称(EET 和 EEST)的变化:

T60:~# strings /usr/share/zoneinfo/posix/Europe/Helsinki
TZif2
    HMT
EEST
TZif2
EEST
EET-2EEST,M3.5.0/3,M10.5.0/4
T60:~# 
Run Code Online (Sandbox Code Playgroud)

另外,M3大概是第三个月,M10是第十个月?此外,还应在某处指定偏移量。例如,在 IOS 中,可以配置一旦 DST 发生,时钟就会移动 90 或 120 分钟而不是 60 分钟。

slm*_*slm 4

如果您查看有关 TZ 数据库的维基百科页面

\n\n

摘抄

\n\n
\n

文件格式

\n\n

tz 数据库作为一组文本文件发布,其中以人类可读的格式列出了规则和区域转换。使用时,这些文本文件被编译成一组独立于平台的二进制文件\xe2\x80\x94,每个时区一个。参考源代码包括一个名为 zic(区域信息编译器)的编译器,以及读取这些文件并在标准 API(例如 localtime() 和 mktime())中使用它们的代码。

\n
\n\n

其他搜索在 stackoverflow 上找到了这个问答,标题为:时区数据库文件格式问题,其中包含有关文件格式的其他信息。

\n