在Linux中将小时添加到日期和时间

时间:2019-12-08 18:01:14

标签: linux date

我正在尝试使用'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脚本中使用它,并且无法确定我在做什么而导致这些不同结果。

任何帮助将不胜感激。

3 个答案:

答案 0 :(得分:0)

经过一番尝试之后,指定没有空格的时区似乎可以达到您想要的目标:

always|collapseActionView

此命令输出date -d "2019-12-08 11:16:45EST+5hours"

希望这会有所帮助!

答案 1 :(得分:0)

GNU date非常奇怪地解析日期,这使其变得不可靠。最可靠的方法是将时间转换为秒。

  1. 将日期转换为秒。
  2. 增加5秒钟的时间。
  3. 将数据转换为您喜欢的格式。

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是从文件的创建日期解析为日期和时间的)