ksh88 中的日期差异

Date Difference in ksh88

我正在编写一个脚本,因为我需要计算我正在使用此命令的两个日期之间的日期差异

Date1="2018-01-01 12:00:00" 
Date2="2018-02-01 12:00:00"
TimeDiff=$(expr $(date -u -d "$Date2" +"%s") - $(date -u -d "$Date1" +"%s"))

这在其他 shell 中工作正常,但在 KSH 88 中不工作。

您的脚本在 ksh88 上运行良好。

如果您说明 OS 您正在使用什么 并提供有关 "is not working" 的更多提示,这将有所帮助,但无论如何,我假设您正在测试在传统的 Unix 上,鉴于 ksh88 在 Linux.

上极为罕见

这个问题很可能与 ksh88 无关,后者完全理解一直存在于 Unix 上的 expr,以及 ksh88 甚至发明的 $( ... ) 符号,但是使用非 POSIX 扩展的命令 date

如果 GNU date 安装在您的计算机上并且可以通过其独特的名称 gdate 访问,您可以简单地使用:

TimeDiff=$(expr $(gdate -u -d "$Date2" +"%s") - $(gdate -u -d "$Date1" +"%s"))

如果相同的脚本在 bash 执行时有效,但当您留在 same 机器上时因 ksh88 而失败,问题出在您的 PATH 上。例如,在 bash 下,您的 PATH 有一个假设的 /usr/gnu/bin 位于第一位,而在 ksh88 下,您的 PATH 以 POSIX 开头/usr/xpg4/bin.