我的脚本中的日期命令遇到了一个有趣的问题。我的脚本生成给定日期范围内的每小时数据负载。我使用日期函数将“起始”日期增加一个小时,直到达到“截止”日期。日期方法工作得很好,并且如我预期的那样将“起始”日期增加了一个小时。然而,一旦达到2017/11/05 01:00:00,它就停止增加。我还没有测试过很多日期,但另一个有同样问题的日期是 2016/11/06 01:00:00。
$ date -d "2017/11/05 01:00:00 1 hour" +"%Y/%m/%d %T"
2017/11/05 01:00:00
$ date -d "2016/11/06 01:00:00 1 hour" +"%Y/%m/%d %T"
2016/11/06 01:00:00
Linux版本 Linux 3.10.0-229.4.2.el7.x86_64
答案1
事实证明,这是 DST(夏令时)导致此问题的原因。当我将 DST 日期凌晨 1 点(11 月的第一个星期日)传递给 date 命令时,它可能会在内部将日期增加一小时,并从 DST 中扣除一小时。解决方案是按照 @jkan5855 的建议使用 -u (UTC)。
$ date -d "2017/11/05 01:00:00 1 hour" +"%Y/%m/%d %T" -u
答案2
尝试date --version
看看您乘坐的是哪个版本的日期。上的命令date (GNU Coreutils) 8.30
工作正常
重新安装或更新 GNU Coreutils(找到适合您的 linux/子系统的软件包),因为显然没有其他人遇到此问题。你的确切命令会2017/11/05 02:00:00
为我打印出来。
如果这不能解决问题,则您的计算机是否暂时受到日期影响。我没有更好的方法来描述它,但请尝试重新启动计算机,因为您也在其他子系统/终端上得到了这个。