尽管成功计算了答案,为什么 date 命令仍会抛出错误?
Why is the date command throwing an error despite successfully computing an answer?
对于上下文,我正在使用 MINGW64 的 Windows 机器上工作。我还没有机会在机器上测试这个 运行 Linux.
我正在 bash 中使用 [date][1]
并尝试将天数添加到自 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")
同样returns
DATE1: 1560908146
date: invalid date ‘1560908146’
DATE2: 26Jun2019 12:20:08
这实际上表明它根本没有添加到定义的日期,而只是添加到今天的日期(我现在是 6 月 24 日)。显然,有什么不对劲!
如果要将时间戳转换为日期,则必须使用 @
:
date --date=@1561344591 '+%F %T'
2019-06-24 04:49:51
即使有错误消息,你仍然得到看似正确的结果的原因是因为你的 DATE1
现在是,所以你的内部 date
调用产生错误并且 returns 什么都没有然后外部调用只是 --date=+2 days
,从现在起产生 2 天。
我认为您不能将时间戳格式的 date-time 与相关语句一起使用,即使与 @
一起使用也不起作用。您必须首先将您的时间戳转换为人类可读的日期,但即便如此您也必须小心。你可能认为这就足够了:
date --date="$(date --date=@1561344591 "+%F %T") + 2 days" "+%F %T"
2019-06-25 04:49:51
如您所见,它仍然是错误的,那是因为 +2
被解析为时区。您可以通过在时间戳转换中明确包含时区来修复它:
date --date="$(date --date=@1561344591 "+%F %T%Z") + 2 days" "+%F %T"
2019-06-26 04:49:51
一般来说,使用bash调试set -x
和日期调试date --debug ...
有助于解决此类问题。
对于上下文,我正在使用 MINGW64 的 Windows 机器上工作。我还没有机会在机器上测试这个 运行 Linux.
我正在 bash 中使用 [date][1]
并尝试将天数添加到自 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")
同样returns
DATE1: 1560908146
date: invalid date ‘1560908146’
DATE2: 26Jun2019 12:20:08
这实际上表明它根本没有添加到定义的日期,而只是添加到今天的日期(我现在是 6 月 24 日)。显然,有什么不对劲!
如果要将时间戳转换为日期,则必须使用 @
:
date --date=@1561344591 '+%F %T'
2019-06-24 04:49:51
即使有错误消息,你仍然得到看似正确的结果的原因是因为你的 DATE1
现在是,所以你的内部 date
调用产生错误并且 returns 什么都没有然后外部调用只是 --date=+2 days
,从现在起产生 2 天。
我认为您不能将时间戳格式的 date-time 与相关语句一起使用,即使与 @
一起使用也不起作用。您必须首先将您的时间戳转换为人类可读的日期,但即便如此您也必须小心。你可能认为这就足够了:
date --date="$(date --date=@1561344591 "+%F %T") + 2 days" "+%F %T"
2019-06-25 04:49:51
如您所见,它仍然是错误的,那是因为 +2
被解析为时区。您可以通过在时间戳转换中明确包含时区来修复它:
date --date="$(date --date=@1561344591 "+%F %T%Z") + 2 days" "+%F %T"
2019-06-26 04:49:51
一般来说,使用bash调试set -x
和日期调试date --debug ...
有助于解决此类问题。