bash"date"返回特定日期字符串的"无效日期"错误

gno*_*ome 8 string bash date

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

我用这个命令来实现这个目的:

date -d "20130101 +1 day" +%Y%m%d
Run Code Online (Sandbox Code Playgroud)

一切顺利,直到达到这个日期:20130322

然后它返回了这个错误:

date: invalid date ‘20130322 +1 day’
Run Code Online (Sandbox Code Playgroud)

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

gno*_*ome 15

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

问题与夏令时有关,每个时区的夏令时都不同.因此,预计错误将在不同时间针对不同时区重现.更多信息可以在这里找到.

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

date -d "20130322 12:00 +1 day" +%Y%m%d
Run Code Online (Sandbox Code Playgroud)