如何在shell脚本中创建可读和可计算的日期/时间?

如何在shell脚本中创建可读和可计算的日期/时间?,shell,datetime,aix,Shell,Datetime,Aix,我正在编写一个shell脚本来跟踪一些正在运行的程序的开始和结束时间。我需要的脚本打印可读的开始和结束时间和时间成本,以秒为单位 为了计算成本,我写了这样的东西 START=$(date +%s) # ................ END=$(date +%s) DIFF=$(( $END - $START )) echo "Start Time: $START" >> $LOGFILE 2>&1 echo "End Time: $END" >> $L

我正在编写一个shell脚本来跟踪一些正在运行的程序的开始和结束时间。我需要的脚本打印可读的开始和结束时间和时间成本,以秒为单位

为了计算成本,我写了这样的东西

START=$(date +%s)
# ................
END=$(date +%s)
DIFF=$(( $END - $START ))
echo "Start Time: $START"  >> $LOGFILE 2>&1
echo "End Time: $END" >> $LOGFILE 2>&1
echo "Running time: $DIFF seconds"  >> $LOGFILE 2>&1
这适用于计算,但$START和$END只能打印为秒数

它能够打印可读的日期格式,如果我定义如下

START=$(date +%c)
END=$(date +%c)
但是,DIFF=$($END-$START))不再适用于它们

因此,我想知道在shell脚本中是否有任何解决方案,以便我可以以定义的格式打印日期,并使用它们进行一些计算


顺便说一句,我正在使用AIX。

如果您有GNU日期,您可以使用纪元时间

date -d @$START +%c
否则,请

read start start_display < <(date +"%s %c")
# ...
read end end_display < <(date +"%s %c")
diff=$(( $end - $start ))
echo "Start time: $start_display"
如果使用bash,请利用内置的$SECONDS变量,对于新的bash进程,该变量从零开始,并每秒递增

start_display=$(date)
# ...
echo "Start Time: $start_display"
echo "End Time: $(date)"
echo "Running time: $SECONDS seconds"

您可以使用日期-d@Seconds将秒转换为日期。 例如:


为什么不使用
time script.sh
来计算执行所需的时间?这对我不起作用。我使用的是AIX5.3,它的默认shell是ksh。它支持您的命令吗?Mybad,AIX没有提供GNUCoreutils来支持带有date命令的-d-s-r-I-f选项。你需要安装这些选项才能工作。我对你的第二个使用“read”的解决方案很感兴趣。但是,语法在我的系统中不起作用。我必须将其更改为打印$(日期+%s%c)|读取开始显示。是因为我在使用ksh吗?可能是因为AIX,不确定。您不需要
打印
:这样就可以
日期+%s%c”|读取x y
start_display=$(date)
# ...
echo "Start Time: $start_display"
echo "End Time: $(date)"
echo "Running time: $SECONDS seconds"
 $ date +%s
     1377095983
 $ date -d @1377095983
     Wed Aug 21 20:09:43 IST 2013