linux 计算两个时间差,精确到毫秒

linux 计算两个时间差,精确到毫秒

因为有些时候需要查看程序的响应时间或执行周期,做了这个脚本。

思路很简单,就是date %s 去获取 1970 年 1 月 1 日 00:00:00 UTC 到截取时间戳的秒数,然后计算时差。

需要注意的点

1.结束毫秒小于开始毫秒时,需要借位,从秒借1。

2.相差的天、小时、分钟、秒的计算方法

范本time.txt如下:4对时间戳,做对比。

2022-01-01 01:01:11.118
2022-01-01 01:01:11.222
2022-01-01 01:02:21.888
2022-01-01 01:02:22.022
2022-01-01 01:03:31.338
2022-01-01 02:33:32.022
2022-01-01 01:04:43.448
2022-01-21 22:44:43.642

脚本如下:

FILE=time.txt
##########################################
WC=`cat $FILE|wc -l`
for i in `seq 1 2 $WC`
do 
VAR=`sed -n ${i}p $FILE` 
if [ -z "$VAR" ];then break;fi


#获取奇数行
DATE1=$VAR
#T,获取日期时间
T1=`echo $DATE1|awk -F '.' '{print $1}'`
#S,获取毫秒
S1=`echo $DATE1|awk -F '.' '{print $2}'`

#获取偶数行(奇数行的下一行)
DATE2=`cat $FILE|grep -A1 "$DATE1"|tail -1`
#T,获取日期时间
T2=`echo $DATE2|awk -F '.' '{print $1}'`
#S,获取毫秒
S2=`echo $DATE2|awk -F '.' '{print $2}'`


#获取时间差!!!如果偶数行毫秒<奇数行需要借1,反之不需要!!!
if [ $S2 -lt $S1  ];then
#相差秒数
DDT=$(( `date -d "$T2" +%s` - `date -d "$T1" +%s` -1 ))
#相差毫秒数
DDS=$(( $S2-$S1+1000 ))
else
#相差秒数
DDT=$(( `date -d "$T2" +%s` - `date -d "$T1" +%s` ))
#相差毫秒数
DDS=$(( $S2-$S1 ))
fi
#得到相差
DDTS=$DDT.$DDS

#相差天数, 秒数 整除 天
DAY=$(( $DDT / (60*60*24)  ))
#相差小时, 秒数 整除 1小时(3600秒)后,对一天(24小时)求余
HOUR=$(($DDT / (60*60) % 24 ))
#相差分钟, 秒数与天求余,排除天;再与小时求余,排除小时;最后剩余秒数整除分钟,得到分钟数
MIN=$(( $DDT %  (60*60*24) % (60*60) /60 ))
#相差秒数,与分钟同理,求余
SECOND=$(( $DDT %  (60*60*24) % (60*60) %60 ))

#打印结果
echo ----------------------------------------------------------
echo "$DATE1 与 $DATE2"
echo "间隔:$DDTS 秒"
echo "相差:${DAY}天${HOUR}小时${MIN}分钟${SECOND}秒${DDS}毫秒"
echo ----------------------------------------------------------
echo
done

good good study, day day up!

发表评论

textsms
account_circle
email

linux 计算两个时间差,精确到毫秒
因为有些时候需要查看程序的响应时间或执行周期,做了这个脚本。 思路很简单,就是date %s 去获取 1970 年 1 月 1 日 00:00:00 UTC 到截取时间戳的秒数,然后计算时差。 需要注意的…
扫描二维码继续阅读
2022-12-11