不同的操作系统似乎以不同的方式处理夏令时 (DST)。我真的很喜欢 Cisco IOS 方法,它非常简单,允许更改 DST 开始和结束时的日期和时间。例如:
clock summer-time EDT recurring 2 Sun Mar 2:00 1 Sun Nov 2:00 60
..在 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:~#
另外,M3
大概是第三个月,M10
第十个月吧?另外,偏移量也应该在某处指定。例如,在 IOS 中,可以配置一旦 DST 发生,时钟就会移动 90 或 120 分钟,而不是 60 分钟。
答案1
如果你看一下有关 TZ 数据库的维基百科页面:
摘抄
文件格式
tz 数据库作为一组文本文件发布,其中以人类可读的格式列出了规则和区域转换。使用时,这些文本文件被编译成一组独立于平台的二进制文件——每个时区一个。参考源代码包括一个名为 zic(区域信息编译器)的编译器,以及读取这些文件并在 localtime() 和 mktime() 等标准 API 中使用它们的代码。
额外的搜索在 stackoverflow 上找到了这个问答,标题为:时区数据库文件格式问题,其中包含有关文件格式的附加信息。