我执行了一个计算,将当前时间戳转换为毫秒以及使用 perl 命令,如下所示:
perl -MTime::HiRes=time -MPOSIX=strftime -e '
$now = int(time() * 1000);
printf "%s.%03d\n", strftime("%H:%M:%S", localtime(int($now/1000))), ($now % 1000);'
从上面我想将输出转换为秒,我可以使用下面的例子来实现:
echo "21:48:40.596" | awk -F: '{ if (NF == 1) {print $NF} else if (NF == 2) {print $1 * 60 + $2} else if (NF==3) {OFMT = "%2.3f"; print $1 * 3600 + $2 * 60 + $3 } }'
使用上面的命令,如果我比较以秒为单位的读数,我可以使用下面的命令来获得以秒为单位的 2 个值之间的差异,同时保持毫秒:
例子:
DIFF_SEC=$(echo "78522.896 - 78520.596" | bc -l | awk '{printf("%.3f\n", $1)}')
输出:
echo $DIFF_SEC
2.300
我想从上面知道如何计算上面命令之间的差异 hh:mm:ss.milseconds
我设法弄清楚了以下内容,但是没有显示毫秒数:
DIFF=`printf '%02dh:%02dm:%02ds.%03d\n' $((DIFF_SEC/3600)) $((DIFF_SEC%3600/60)) $((DIFF_SEC%60))`
输出:
echo "$DIFF"
00h:00m:02s.000
我期待的是:
00h:00m:02s.300
0.040614
这是一个例子,从“现在”开始,然后区分第一个“现在”和第二个“现在”。我想这就是你要问的,除非我读错了。
您正在向 tv_interval 传递第一个时间数组的数组引用,以及第二个 now 时间数组的数组引用。
您基本上没有完全使用 Time::HiRes,它已经在本机完成所有这些,因此无需使用其他任何东西。这对于日志记录等非常有用。
如果您在 AIX 上使用 perl 遇到困难,您可以使用下面的方法,这并不理想,但它确实有效:
输出:
快速提醒一下,我们可以使用命令
date
重新格式化日期和时间date
也可以计算差异最后可以按日期计算T1和T2:
代替 Time::HiRes,使用 Time::Format:
Time::HiRes
如果您的整个过程都在perl
. 只有非常有限的任务集需要测量纳秒级的时间。但是由于您使用的是命令行执行,我假设您想要测量某些工具的某些执行 - 您会在执行过程中单独松散纳秒,如果毫秒足够,您不需要纳秒 - Time::Format 是足够。
如果你需要测量时差,你可以这样做: