在 Linux 中将时间添加到日历日期会给出错误的结果

问题描述 投票:0回答:2

我在 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 对此进行了测试,两者都出现相同的结果。我做错了什么?

linux date calendar gnu utc
2个回答
1
投票

我试图从 UTC 日期添加,但我没有向该工具指定这一点。这就是解决方案:

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

由于UTC不遵守DST,所以小时内不会有班次。


0
投票

万一其他人遇到这个障碍,这是我刚刚发现的:

TZ=Africa/Johannesburg date -d "11 Dec 2023 09:00 +4 hours" +%Y-%m-%dT%H:%M:%S+02:00

产生

2023-12-11T08:00:00+02:00
,即提前一小时而不是晚四小时。

我得到正确答案的方法是将其分为两个步骤:

d="$(TZ=Africa/Johannesburg date -d "11 Dec 2023 09:00" +%Y-%m-%dT%H:%M:%S+02:00)"
TZ=Africa/Johannesburg date -d "$d +4 hours" +%Y-%m-%dT%H:%M:%S+02:00

产生了预期的

2023-12-11T13:00:00+02:00

© www.soinside.com 2019 - 2024. All rights reserved.