我正在尝试使用'date'命令在Linux(Ubuntu 18.04.03)中将日期和时间添加5小时。如果指定日期与未指定日期,则得到不同的结果。
示例1:我想在特定日期增加5个小时:
[12:45:25 ~]$ date -d "2019-12-08 12:16:45 +5 hours"
Sun Dec 8 03:16:45 EST 2019
但是结果是在指定日期和时间之前9个小时。我原本以为日期为12/8,时间为17:16:45。
示例2:我将系统日期增加5个小时:
[12:45:37 ~]$ date -d "+5 hours"
Sun Dec 8 17:46:02 EST 2019
这个结果是正确的,符合我的预期。
我想在bash脚本中使用它,并且无法确定我在做什么而导致这些不同结果。
任何帮助将不胜感激。
答案 0 :(得分:0)
经过一番尝试之后,指定没有空格的时区似乎可以达到您想要的目标:
always|collapseActionView
此命令输出date -d "2019-12-08 11:16:45EST+5hours"
希望这会有所帮助!
答案 1 :(得分:0)
GNU date非常奇怪地解析日期,这使其变得不可靠。最可靠的方法是将时间转换为秒。
date -d "@$(( $(date -d "2019-12-08 12:16:45" %s) + (5 * 60 * 60) ))"
日期-d“ 2019-12-08 12:16:45 +5小时”
我想+5
被解析为时区。因此,如果您在时区+5
中并且想要EST
,则您需要将时区与实际EST时间相减5个小时,将EST等同于4个小时。 hours
被忽略。
答案 2 :(得分:0)
在日期和时间字符串中添加EST会给出正确的答案。
我发现值得像这样获取时区和偏移量:
dateInfo=$(date +"%Z %z")
dateTZ=${dateInfo:0:3}
dateOffset="+"${dateInfo:5:2}
然后在转换代码中使用它们:
DATE=$(date -d "$CDATE1 $dateTZ $dateOffset hours" +%Y%m%d)
(其中CDATE1是从文件的创建日期解析为日期和时间的)