因为做kettle数据抽取,常常要知道执行消耗了多少时间,而自己对shell只是知道一些基础的东西,于是网上查资料,顺便进行下总结:
思路:
1.将时间date转变为时间戳(即从1970-01-01 00:00:00 开始算起的秒数)
2.时间戳之间就可以直接进行运算了
3.运算得到的结果是秒,可以进一步运算除以60去得到分钟,小时,天数等
3.1.也可以将秒转化为date型:$(date +%Y-%m-%d' '%H:%M:%S -d "1970-01-01 UTC $t1 seconds"),注意,这里得到的是从1970年开始算起的日期,要算实际消耗的年月日,对1970-01-01进行运算便可
#!/bin/bash
_time1=$(date +%Y-%m-%d' '%H:%M:%S -d "2015-08-31 01:01:10")
_time2=$(date +%Y-%m-%d' '%H:%M:%S -d "2016-07-30 09:38:30")
echo $_time1
echo $_time2
#得到时间戳
t1=$(date +%s -d "$_time1")
t2=$(date +%s -d "$_time2")
echo t1
echo t2
echo $(($t2-$t1))
#得到时间差
t3=$(($t2-$t1))
#将时间戳转换为常规日期显示
t4=$(date +%Y-%m-%d' '%H:%M:%S -d "1970-01-01 UTC $t3 seconds")
echo $t4
#得到年-月-日,时:分:秒
ydate=$(date +%Y -d "$t4")
mdate=$(date +%m -d "$t4")
ddate=$(date +%d -d "$t4")
htime=$(date +%H -d "$t4")
mtime=$(date +%M -d "$t4")
stime=$(date +%S -d "$t4")
_year=$(($ydate-1970))
_month=$(($mdate-1))
_day=$(($ddate-1))
echo "start time $_time1"
echo "end time $_time2"
#输出最终想要的格式
echo $_year-$_month-$_day' '$(date +%H:%M:%S -d "1970-01-01 UTC $t3 seconds")