Shell程序集锦六--时间计算函数

 #!/bin/bash

function get_date()
{
        local array=`date -u +%y/%m/%d/%H/%M/%S`
        local oIFS=$IFS
       
        IFS="$IFS/"

        array=(${array[@]})

        g_y=${array[0]}
        g_m=${array[1]}
        g_d=${array[2]}
        g_H=${array[3]}
        g_M=${array[4]}
        g_S=${array[5]}

        IFS="$oIFS"

        return 0
}

function y2d()
{
        local year=$1
        local day=0

        # set year
        (((year < 70) ? (year += 2000) : (year += 1900)))

        # count days
        for ((i=1970; i<year; i++))
        do
                if (((i % 4 == 0 && i % 100 != 0) || i % 400 == 0))
                then
                        ((day += 366))
                else
                        ((day += 365))
                fi
        done

        # save result to g_day
        ((g_d += day))

        return 0
}

function m2d()
{
        local month=$1
        local day=0

        # count days
        for ((i=1; i<month; i++))
        do
                case $i in
                        1|3|5|7|8|10|12)
                                ((day += 31))
                                ;;
                        4|6|9|11)
                                ((day += 30))
                                ;;
                        2)
                                if (((i % 4 == 0 && i % 100 != 0) || i % 400 == 0))
                                then
                                        ((day += 29))
                                else
                                        ((day += 28))
                                fi
                                ;;
                esac
        done

        # save result to g_day
        ((g_d += day))

        return 0
}

function main()
{
        get_date
        y2d $g_y
        m2d $g_m
       
        # total seconds
        echo $(((--g_d * 24 * 3600) + g_H * 3600 + g_M * 60 + g_S))
}


# call main function
main

#################################################################################

#计算$y-$Y年的天数
comp_YT()
{
T=0
tTy=0
while [ $y -le $Y ]
do
if [ `expr $y % 4` -eq 0 -a `expr $y % 100` -ne 0 ]||[ `expr $y % 400` -eq 0 ];then
   T=366
else T=365
fi
tTy=`expr $tTy + $T`
y=`expr $y + 1`
done
}

#判断是否润年
comp_flag()
{
if [ `expr $YY % 4` -eq 0 -a `expr $YY % 100` -ne 0 ]||[ `expr $YY % 400` -eq 0 ];then
   flag=1
else flag=0
fi
}

#计算月天数
comp_MT()
{
tM=0
tTm=0
while [ $m -le 12 ]
do
if [ $flag -eq 1 ];then
case $m in
1|3|5|7|8|10|12)
         tM=31;;
2)     tM=29;;
4|6|9|11)
       tM=30;;
esac
tTm=`expr $tTm + $tM`
else
case $m in
1|3|5|7|8|10|12)
         tM=31;;
2)     tM=28;;
4|6|9|11)
       tM=30;;
esac
tTm=`expr $tTm + $tM`
fi
m=`expr $m + 1`
done
}

#计算当天时间的秒数
comp_ST()
{
tS=`expr $h /* 3600 + $mi /* 60 + $s`
}

getSecond()
{
ttS=`expr $T3 /* 86400 + $dtS`
}

u=20050324185030
v=20070405152006
y=`echo $u|cut -c1-4`
y=`expr $y + 1`
Y=`echo $v|cut -c1-4`
comp_YT
YY=`echo $u|cut -c1-4`
comp_flag
M=`echo $u|cut -c5-6`
m=`expr $M /* 1`
D=`echo $u|cut -c7-8`
comp_MT
T1=`expr $tTy + $tTm - $D`

YY=`echo $v|cut -c1-4`
m=`echo $v|cut -c5-6`
m=`expr $m /* 1`
D=`echo $v|cut -c7-8`
comp_flag
comp_MT
T2=`expr $tTm - $D`
T3=`expr $T1 - $T2`
echo $T3

h=`echo $u|cut -c9-10`
mi=`echo $u|cut -c11-12`
s=`echo $u|cut -c13-14`
comp_ST
echo $tS
tSu=$tS
echo $tSu

h=`echo $v|cut -c9-10`
mi=`echo $v|cut -c11-12`
s=`echo $v|cut -c13-14`
comp_ST
echo $tS
tSv=$tS
echo $tSv
dtS=`expr $tSv - $tSu`
echo $dtS

getSecond
echo $ttS

######################################################################
#!/usr/bin/sh
#取每个月的最后一天.
#Test On Sol9

YEAR=`date +%Y`

for i in 1 2 3 4 5 6 7 8 9 10 11 12
do
        LAST_DAY=`cal $i $YEAR | grep -v '^$' | tail -1 | awk '{print $NF}'`
        echo "/t Month:$i-->$LAST_DAY"
done

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值