在 Linux 中将时间添加到日历日期会给出不正确的结果

Adding time to calendar date in Linux gives incorrect result

我在 Linux,我正在尝试使用日期工具将特定天数、小时数和分钟数添加到指定的日历日期:

例如:

$ date -d "2013-01-01 + 305 days 12 hours 30 minutes" +"%Y%m%d%0k%M%S"
20131102123000

拆分结果以便于我们阅读:

2013-11-02 12:30:00

这似乎工作正常。但是,当我添加 306 天而不是 305 天时:

$ date -d "2013-01-01 + 306 days 12 hours 30 minutes" +"%Y%m%d%0k%M%S"
20131103113000

拆分:

2013-11-03 11:30:00

注意现在的小时数是 11 而不是 12!但我告诉它要增加 12 小时...让我再增加一天:

$ date -d "2013-01-01 + 307 days 12 hours 30 minutes" +"%Y%m%d%0k%M%S"
20131104123000

并再次拆分结果:

2013-11-04 12:30:00

现在时间又回到了我的预期。我已经使用日期版本 8.12 和 8.4 对此进行了测试,两者的结果相同。我做错了什么?

我试图从 UTC 日期添加,但我没有在工具中指定它。这是解决方案:

date --utc -d "2013-01-01 + 307 days 12 hours 30 minutes" +"%Y%m%d%0k%M%S"

由于 UTC 不遵守夏令时,因此小时不会发生变化。