【问题标题】:add time units to a date without timezone将时间单位添加到没有时区的日期
【发布时间】:2018-08-21 12:35:12
【问题描述】:

我在 Linux bash 中编写这些

date -d "2018-08-21 02:00:00" +'%y-%m-%d %T'

它会打印出来

2018-08-21 02:00:00

但是当我写这些的时候

date -d "2018-08-21 02:00:00 +1 hour" +'%y-%m-%d %T'

打印出来

2018-08-21 07:30:00 而不是2018-08-21 03:00:00

它将我的时区添加到日期。添加时间单位时如何忽略时区?

【问题讨论】:

标签: bash date datetime timezone


【解决方案1】:

发生的情况是+1 被解释为时区UTC+1h。因此,它会将您的输入日期从 UTC+1 转换为您的本地时区,然后由于声明 hour 仍会增加​​一个小时。

要解决这个问题,你必须去掉+ 符号。以下是一些可能性:

date -d "2018-08-21 02:00:00 next hour" "+%F %T"
date -d "2018-08-21 02:00:00 hour" "+%F %T"

或者使用浮点数:

date -d "2018-08-21 02:00:00 + 1.0 hour" "+%F %T"

有关为什么会这样的更多信息,请查看: How to add an interval to a date/time stored in a variable

【讨论】:

  • tnx.我真的被吓坏了
  • 好答案。避免+ 被视为时区偏移的另一种方法是将相对时间短语从时间字符串的末尾移开:date -d "2018-08-21 +1 hour 02:00:00" +'%y-%m-%d %T' => 18-08-21 03:00:00
  • @glennjackman 这是真的,解释器的工作方式非常不合逻辑。我看了一段时间。我停下了!尽管如此,我相信最清晰的人类可读形式是使用浮点数:date -d "2018-08-21 02:00:00 + 1.0 hour" "+%F %T"
  • @glennjackman 您的案例有效的原因是日期解释器不再将格式视为 ISO 格式,因此不再需要时区。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-21
  • 2021-03-26
  • 1970-01-01
  • 1970-01-01
  • 2011-09-02
相关资源
最近更新 更多