为什么 `TZ=Asia/Kolkata date --date="1/1/1906"` 无效?

为什么 `TZ=Asia/Kolkata date --date="1/1/1906"` 无效?

当我跑步时:

TZ=Asia/Kolkata date --date="1/1/1906"

我得到:

date: invalid date ‘1/1/1906’

在这里我可以找到一篇关于这方面的好文章: 加尔各答时间

但令人困惑的另一个原因是 1905 年是一个有效日期。只有 1906 年不是。有什么线索吗?

答案1

根据时区数据库(参考了其他来源),1906 年 1 月 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

仅指定日期默认为 00:00:00,这是无效的。

每当当地时间快进时就会发生这种情况,例如当当地时间从“冬令时”切换为“夏令时”(或夏令时)时:

$ TZ=Europe/Paris date --date="03/29/2020 02:30"
date: invalid date ‘03/29/2020 02:30’

1 出于时区数据库的目的,此处的“本地时间”被定义为“铁路时间”,IE当地火车站的火车时刻表以及其他铁路相关活动所用的时间。参见印度部分亚洲数据库了解详情。

时区数据库认为维基百科的“加尔各答时间“(5:53:20)一直使用到 1870 年,当时火车站改为马德拉斯时间。更令人困惑的是,时区数据库将 5:53:20 称为“豪拉标准时间”(有一些疑问),而“加尔各答时间”的定义偏移量为 5:53:28,一直使用到六月1854 年 12 月 28 日(同样是为了铁路目的)。

相关内容