#!/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
Shell程序集锦六--时间计算函数
最新推荐文章于 2024-07-31 15:36:01 发布