当我运行时:
TZ=Asia/Kolkata date --date="1/1/1906"
Run Code Online (Sandbox Code Playgroud)
我得到:
date: invalid date ‘1/1/1906’
Run Code Online (Sandbox Code Playgroud)
在这里我可以找到一篇很好的文章: 加尔各答时间
但混淆也来自于 1905 年是一个有效日期这一事实。只有 1906 年不是。任何线索为什么?
Ste*_*itt 51
根据时区数据库(参考其他来源),1906 年 1 月 1 日,加尔各答当地时间¹从偏移 5:21:10(“马德拉斯时间”)更改为偏移 5:30(印度标准时间),这意味着在 1905 年 12 月 31 日到 1906 年 1 月 1 日之间“丢失”了 8 分 50 秒。后者从 00:08:50 开始。
$ TZ=Asia/Kolkata date --date="1/1/1906 00:08:49"
date: invalid date ‘1/1/1906 00:08:49’
$ TZ=Asia/Kolkata date --date="1/1/1906 00:08:50"
Mon 1 Jan 00:08:50 IST 1906
Run Code Online (Sandbox Code Playgroud)
仅指定日期默认为 00:00:00,无效。
每当本地时间向前跳过时就会发生这种情况,例如当本地时间从“冬令时”切换到“夏令时”(或夏令时)时:
$ TZ=Europe/Paris date --date="03/29/2020 02:30"
date: invalid date ‘03/29/2020 02:30’
Run Code Online (Sandbox Code Playgroud)
¹ 出于时区数据库的目的,此处的“当地时间”定义为“铁路时间”,即用于当地火车站的火车时刻表和其他铁路相关事件的时间。有关详细信息,请参阅亚洲数据库的印度部分。
时区数据库认为维基百科的“加尔各答时间”(5:53:20)一直使用到1870年,火车站改为马德拉斯时间。更令人困惑的是,时区数据库将 5:53:20 称为“Howrah Mean Time”(有一些疑问),而“Calcutta Time”的定义偏移量为 5:53:28,一直使用到六月28, 1854(再次用于铁路目的)。