【问题标题】:bash "date" returns "invalid date" error for a specific date stringbash“日期”返回特定日期字符串的“无效日期”错误
【发布时间】:2023-03-16 19:12:01
【问题描述】:

我想在 bash 中使用 date 命令为日期添加一天。日期输入格式如下:20130101,表示2013年1月1日

我使用这个命令来完成:

date -d "20130101 +1 day" +%Y%m%d

直到今天一切顺利:20130322

然后它返回了这个错误:

date: invalid date ‘20130322 +1 day’

我尝试了其他一些类似日期的代码,其中一些很好,有些则不然!正常吗?我的意思是它可能与数字系统转换有关,例如当 for 循环到达第 9 个循环时发生的转换。如何正确解决该问题?

【问题讨论】:

  • 显示您的完整代码。它有效,刚刚尝试this script 并在 20670201 停止...
  • RHEL6、RHEL7、Ubuntu 11.04 和 Ubuntu 14.04.1 没有问题。可使用 RHEL5 重现,但使用来自 GNU coreutils 5.97 版的日期命令的 date -d "20130101 +1 day" +%Y%m%ddate -d "20130322 +1 day" +%Y%m%d
  • @jm666 我试过你的代码,在 CentOS 6.5 和 Ubuntu 14.04 上还是一样
  • date (GNU coreutils) 8.23 一起使用...奇怪。我从来没有想过可能会有这样的错误..

标签: string bash date


【解决方案1】:

好的,我找到了问题的原因。

问题与夏令时有关,每个时区都不同。因此,预计该错误会在不同时区的不同日期重现。更多信息可以找到here.

我的时区是 IRST (+3:30),例如,在 2013 年 3 月 22 日 (20130322) 调整为向前一小时,因此 date 命令针对该日期返回“无效日期”错误。 为了解决这个问题,在提供的链接中也提到,您应该在日期之外提供时间,这显然不应该在无效时间范围内。 3 月 22 日 00:00:00 到 00:59:59 之间的任何时间都对我的时区无效,应该避免。因此,对于 2013 年 3 月 22 日,我可以通过这种方式更改命令以避免错误:

date -d "20130322 12:00 +1 day" +%Y%m%d

【讨论】:

  • 就我而言,我还必须添加我的时区 (UTC-3)。所以,对我有用的是:date -d "20170803 12:00 -0300 -1 day" +%Y%m%d
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-07
  • 1970-01-01
  • 2020-12-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多