Aix ksh计算两个时间差

来源:互联网 发布:苏州文荟人才公寓网络 编辑:程序博客网 时间:2024/04/28 15:29

Ksh中不同于bsh,不支持两个日期直接运算,但可通过以下方法进行计算。

1.先设置一个基础日期[月日最好为1月1日,方便计算],如下设为2010-01-01

2.分别算出两个日期与2010-01-01的秒数差

3.将得到的两个描述差相减即为这两个日期的秒数差


##2月份需要判断平润年

BASEYEAR=2010;BASEMONTH=1;BASEDAY=1;
BASEHOUSR=0;BASEMINUTE=0;BASESECOND=0;
year=0; month=0;
day=0;hour=0;minute=0;second=0;staticsumsec=0
dwly()
{
days=0;i=$BASEYEAR
#deal with the leapyear
while [ $i -lt $year ]
do
#year2days
if [ `expr $i \% 100 ` -eq 0 ]
then
        if [ `expr $i \% 400 ` -eq 0 ]
        then
                days=` expr $days + 366 `
        else
                days=` expr $days + 365 `
        fi
else
        if [ `expr $i \% 4 ` -eq 0 ]
        then
                days=` expr $days + 366 `
        else
                days=` expr $days + 365 `
        fi
fi
i=`expr $i + 1 `
done
#months2days
m=$BASEMONTH
while [ $m -lt $month ]
do
case $m in 
1)
        days=`expr $days + 31 `
;;
2)
if [ `expr $year \% 100 ` -eq 0 ] 
then
if [ `expr $i \% 400 ` -eq 0 ]
        then
                days=` expr $days + 29 `
        else
                days=` expr $days + 28 `
        fi
else
        if [ `expr $i \% 4 ` -eq 0 ]
        then
                days=` expr $days + 29 `
        else
                days=` expr $days + 28 `
        fi
fi
;;
3)
        days=`expr $days + 31 `
;;
4)
        days=`expr $days + 30 `
;;
5)
        days=`expr $days + 31 `
;;
6)
        days=`expr $days + 30 `
;;
7)
        days=`expr $days + 31 `
;;
8)
        days=`expr $days + 31 `
;;
9)
        days=`expr $days + 30 `
;;
10)
        days=`expr $days + 31`
;;
11)
        days=`expr $days + 30`
;;
12)
        days=`expr $days + 31`
;;
esac
m=`expr $m + 1 `
done
#day2days
days=`expr $days + $day`
days=`expr $days - 1`
#days2second
sumsec=`expr $days \* 86400`
tmp_hs=`expr $hour \* 3600`
tmp_ms=`expr $minute \* 60`
sumsec=`expr $sumsec + $tmp_hs`
sumsec=`expr $sumsec + $tmp_ms`
sumsec=`expr $sumsec + $second`
staticsumsec=$sumsec
}
  

##分别得到年月日小时分钟秒,并求出该时间与2010-01-01的时间差

cat $SAVEDIR/target/control.cfg |while read line
do
tmpstr=`echo $line|awk -F " " '{print $3}'|awk -F "_" '{print $1"_"$2"_"$3" "substr($4,0,2)":"substr($4,2,2)":"substr($4,4,2)}'`
arrivalTime=$tmpstr
year=`echo $tmpstr|cut -d '_' -f1`
month=`echo $tmpstr|cut -d '_' -f2`
day=`echo $tmpstr|cut -d '_' -f3|awk -F " " '{print $1}'`
hms=`echo $tmpstr|awk -F " " '{print $2}'`
hour=`echo $hms|awk -F ":" '{print $1}'`
minute=`echo $hms|awk -F ":" '{print $2}'`
second=`echo $hms|awk -F ":" '{print $3}'`
dwly;#调用上面的函数求出该日期与2010-01-01的秒数差
tmpsec=$sumsec
tmpstr=`date +%Y_%m_%d" "%H:%M:%S `
year=`echo $tmpstr|cut -d '_' -f1`
month=`echo $tmpstr|cut -d '_' -f2`
day=`echo $tmpstr|cut -d '_' -f3|awk -F " " '{print $1}'`
hms=`echo $tmpstr|awk -F " " '{print $2}'`
hour=`echo $hms|awk -F ":" '{print $1}'`
minute=`echo $hms|awk -F ":" '{print $2}'`
second=`echo $hms|awk -F ":" '{print $3}'`
dwly;#调用上面的函数求出该日期与2010-01-01的秒数差
todaysec=$sumsec
dif=`expr $todaysec - $tmpsec`#求出两个时间差的差即为我们要的两个日期的时间差
hours_dif=`expr $dif \/ 3600 `#将秒数差换算为小时差

done

0 0
原创粉丝点击