linux 计算时间函数,万能的计算日期函数

万能的计算日期函数

发布时间:2006-02-11 09:54:36来源:红联作者:[Hl.y]

#!/bin/sh

####作者:RUIFOX

####功能:取得某日期的任意天前或后的日期

####参数1为?获得帮助

if [ "$1" = "?" ]

then

echo "功能:取得某日期的任意天前或后的日期

Usage:date_g [-b|-a] [n(days)] [Now(yyyymmdd)]

-b 表示往前的日期

-a 表示往后的日期,缺省为-a 1,即往后一天

n 表示间隔的天数,缺省为1

Now 表示基点日期,缺省为当前日期

如:date_g -a 365 20050210,结果为20060210"

exit

fi

####参数2表示间隔天数,缺省为1天

Pre=1

if [ "$2" != "" ]

then

Pre=$2

fi

####参数3表示基点日期,缺省为当前系统日期

####如果要输入特定的基点日期,参数2则不能省略

if [ "$3" != "" ]

then

Len=`expr length "$3"`

if [ $Len != 8 ]

then

echo "非法基点日期[$Len]!!"

exit

fi

year=`echo $3|awk '{print substr($1,1,4)}'`

month=`echo $3|awk '{print substr($1,5,2)}'`

day=`echo $3|awk '{print substr($1,7,2)}'`

DateP=$3

else

month=`date +%m`

day=`date +%d`

year=`date +%Y`

DateP=`date +'%Y%m%d'`

fi

####参数1表示向前或向后计数

if [ "$1" = "-a" ]

then

day=`expr $day + $Pre`

Ss="后"

else

day=`expr $day - $Pre`

Ss="前"

fi

####函数mon_max_day获得每个月的最大天数

####参数一:月数(1-12)

####输出:显示最大天数

mon_max_day()

{

day=0

if [ $1 -gt 0 -a $1 -lt 13 ]

then

case $1 in

1|01|3|03|5|05|7|07|8|08|10|12) day=31;;

4|04|6|06|9|09|11) day=30;;

2|02)

if [ `expr $year % 4` -eq 0 ]; then

if [ `expr $year % 400` -eq 0 ]; then

day=29

elif [ `expr $year % 100` -eq 0 ]; then

day=28

else

day=29

fi

else

day=28

fi;;

esac

fi

printf $day

}

####主程序开始

Max=`mon_max_day $month`

####针对向前的情况

while [ $day -le 0 ]

do

month=`expr $month - 1`

if [ $month -eq 0 ]

then

month=12

year=`expr $year - 1`

fi

Max=`mon_max_day $month`

day=`expr $day + $Max`

done

####针对向后的情况

while [ $day -gt $Max ]

do

day=`expr $day - $Max`

month=`expr $month + 1`

if [ $month -eq 13 ]

then

month=1

year=`expr $year + 1`

fi

Max=`mon_max_day $month`

done

DateA=`printf "%02d%02d%02d" $year $month $day`

#echo "基点日期为[$DateP],[$Pre]天$Ss的日期为[$DateA]"

echo "$DateA"

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值