【问题标题】:Adding time to calendar date in Linux gives incorrect result在 Linux 中将时间添加到日历日期会产生不正确的结果
【发布时间】:2017-08-04 16:55:16
【问题描述】:

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

【问题讨论】:

  • 可能是因为夏令时的变化。检查时区并将%z %Z 添加到date 模式以查看正在使用的时区
  • 这肯定是由于 2013 年 11 月 3 日的夏令时切换timeanddate.com/time/change/usa/new-york?year=2013
  • 你们回答了。我试图从 UTC 日期添加,但该工具将我的请求解释为本地时区。这将解释 DST 开关。
  • 使用-u--utc 选项将日期解释为UTC

标签: linux date calendar gnu utc


【解决方案1】:

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

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

由于 UTC 不遵守 DST,因此一小时内不会有班次。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-07-17
    • 1970-01-01
    • 2023-01-24
    • 1970-01-01
    • 2011-11-07
    • 1970-01-01
    • 2020-09-01
    • 1970-01-01
    相关资源
    最近更新 更多