在Bash中给指定日期时间加24小时结果异常,求解决方法
Bash日期时间计算异常问题及解决方法
我尝试在Bash中给一个日期时间字符串添加24小时,但得到的结果异常。
以下命令执行正常:
$ date +"%Y-%m-%d %H:%M:%S" -d "2016-01-01 21:00:00" 2016-01-01 21:00:00
但尝试增加时间后,结果完全错误:
$ date +"%Y-%m-%d %H:%M:%S" -d "2016-01-01 21:00:00 + 1 day" 2016-01-02 20:00:00 <- 预期结果:2016-01-02 21:00:00 $ date +"%Y-%m-%d %H:%M:%S" -d "2016-01-01 21:00:00 + 24 hours" 2015-12-31 22:00:00 <- 预期结果:2016-01-02 21:00:00 $ date +"%Y-%m-%d %H:%M:%S" -d "2016-01-01 21:00:00 + 5 mins" 2016-01-01 16:01:00 <- 预期结果:2016-01-01 21:05:00
我的命令哪里出错了?
--- 更新信息 ---
当前时区设置如下:
$ timedatectl Local time: Mon 2022-12-26 23:58:14 WET Universal time: Mon 2022-12-26 23:58:14 UTC RTC time: Mon 2022-12-26 23:58:14 Time zone: Atlantic/Canary (WET, +0000) System clock synchronized: yes NTP service: active RTC in local TZ: no $ cat /etc/timezone Atlantic/Canary
--- 解决方案 ---
感谢帮助,我找到了正确的命令。
解决方案1:
在日期时间字符串末尾添加时区信息"Z"即可解决问题date +"%Y-%m-%d %H:%M:%S" -d "2016-01-01 21:00:00Z + 24 hours"解决方案2:
将日期时间字符串转换为时间戳,添加24小时对应的秒数后,再转换回字符串格式date -d "@$(($(date "+%s") + 60 * 60 * 24))" +"%Y-%m-%d %H:%M:%S"
内容的提问来源于stack exchange,提问作者zappee
相关产品推荐
相关产品推荐

