对于上下文,我正在使用MINGW64的Windows计算机上工作。我没有机会在运行Linux的计算机上对此进行测试。
我正在使用[date][1]
进行bash调试,并尝试将日期添加到以1970-01-01 00:00:00表示的秒数形式的日期,即格式为%s
。我有以下Bash代码:
DATE1=$(date --date=now "+%s")
echo "DATE1: ${DATE1}"
DATE2=$(date --date="$(date --date="${DATE1}" "+%s")+2 days" "+%d%b%Y %H:%M:%S")
echo "DATE2: ${DATE2}"
哪个提供控制台输出
DATE1: 156133763
date: invalid date '1561337963'
DATE2: 26Jun2019 10:59:24
实际上,DATE2
的期望值低至秒。但是,控制台仍会引发错误。为什么会发生此错误?它与运行MINGW64有关吗?
更新:
我在我可以访问的Debian服务器上运行了它。它像在MINGW上一样使用now
计算时间,但是返回了另一个错误:./test.sh: line 3: --date=1561342165: command not found
。
在具有自定义日期的同一服务器上运行此命令:
DATE1=$(date --date="$(date --date="19Jun2019 11:35:46" "+%d%b%Y %H:%M:%S")" "+%s")
类似方式返回
DATE1: 1560908146
date: invalid date ‘1560908146’
DATE2: 26Jun2019 12:20:08
实际上表明它根本没有添加到定义的日期,而只是添加了今天的日期(这是我现在所在的6月24日)。显然,出了点问题!
答案 0 :(得分:4)
如果要将时间戳转换为日期,则必须使用@
:
date --date=@1561344591 '+%F %T'
2019-06-24 04:49:51
即使出现错误消息也能获得看似正确的结果的原因是因为您的DATE1
现在到了,所以内部date
调用会产生错误,什么也不返回,然后外部调用只是{ {1}},从现在开始产生2天。
我认为您无法将时间戳格式的日期时间与相关语句一起使用,即使使用--date=+2 days
也无法使用。您必须先将时间戳转换为人类可读的日期,但是即使如此,您也必须小心。您可能认为这已经足够:
@
如您所见,它仍然是错误的,这是因为date --date="$(date --date=@1561344591 "+%F %T") + 2 days" "+%F %T"
2019-06-25 04:49:51
被解析为时区。您可以通过在时间戳转换中明确包含时区来解决此问题:
+2
通常,使用bash调试date --date="$(date --date=@1561344591 "+%F %T%Z") + 2 days" "+%F %T"
2019-06-26 04:49:51
和日期调试set -x
有助于解决此类问题。