免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2663 | 回复: 5

请助:怎样得到日期差值(信合的朋友请指教) [复制链接]

论坛徽章:
0
发表于 2003-01-28 11:05 |显示全部楼层
最近要完成一项任务:求存款的年平余额,.
在算天数的时候发现用"2003/01/01-2002/01/01" 得到天数365 ,老是得到减项这个字符串而不是365这个值:我想了很多办法都不能解决这个问题请朋友们多帮忙不胜感激!!

论坛徽章:
0
发表于 2003-01-28 11:20 |显示全部楼层

请助:怎样得到日期差值(信合的朋友请指教)

get_next_date()
{
        Y=`expr substr $1 1 4`
        M=`expr substr $1 5 2`
        D=`expr substr $1 7 2`
        YY=`expr $Y + 1`
        MM=`expr $M + 1`
        DD=`expr $D + 1`
        MM=`printf "%02d" $MM`
        DD=`printf "%02d" $DD`
        r1=`expr $Y \% 4`
        r2=`expr $Y \% 100`
        r3=`expr $Y \% 400`

        next_date=$Y$M$DD
        if [ $D -eq 30 ];then
                case $M in
                04|06|09|11) next_date=$Y$MM"01";;
                esac
        fi
        if [ $D -eq 31 ];then
                next_date=$Y$MM"01"
                case $M in
                12) next_date=$YY"0101";;
                esac
        fi
        if [ $M -eq 02 ];then
                if [ r1 -eq 0 -a r2 -ne 0 -o r3 -eq 0 ];then
                        if [ $D -eq 29 ];then
                                next_date=$Y$MM"01"
                        fi
                else
                        if [ $D -eq 28 ];then
                                next_date=$Y$MM"01"
                        fi
                fi
        fi
        echo $next_date
}
get_mon_between_days()
{
        begin_date=$1
        end_date=$2
        i=0

        while [ $begin_date -le $end_date  ];do
                i=`expr $i + 1`
                begin_date=`get_next_date $begin_date`
        done
        echo $i
}

get_mon_between_days 20020101 20030101

我试了效率有点慢,不知各位有无更好的方法(指的是shell,我用C写了一个,当然快了)

论坛徽章:
0
发表于 2003-01-28 12:28 |显示全部楼层

请助:怎样得到日期差值(信合的朋友请指教)

把数据贴出来看看。为何不用C写?

论坛徽章:
0
发表于 2003-01-28 13:58 |显示全部楼层

请助:怎样得到日期差值(信合的朋友请指教)

l楼上的是一种思路.不错

论坛徽章:
0
发表于 2003-01-28 14:27 |显示全部楼层

请助:怎样得到日期差值(信合的朋友请指教)

以前俺也留过一篇取某日期后一天的算法
#date=YYYYMMDD
#Usage:command date
next_day()
{
[ $mm -eq 12 -a $dd -eq 31 ] && mm=1 && dd=1 && yy=`expr $yy + 1` && ret
urn
aaa=`cal $mm $yy`
bbb=`echo $aaa|awk '{print $NF}'`
[ $dd -eq $bbb ] && mm=`expr $mm + 1` && dd=1 && return
dd=`expr $dd + 1`
}
str=$1
yy=`echo $str|cut -c 1-4`
mm=`echo $str|cut -c 5-6`
dd=`echo $str|cut -c 7-8`
next_day
expr $dd : "^.$" > /dev/null && dd=0$dd
expr $mm : "^.$" > /dev/null && mm=0$mm
echo $yy$mm$dd

论坛徽章:
0
发表于 2003-01-28 14:49 |显示全部楼层

请助:怎样得到日期差值(信合的朋友请指教)

俺给改了改#date1,date2:yyyymmdd
#Usage:command date1 date2
str=$1
yy1=`echo $str|cut -c 1-4`
mm1=`echo $str|cut -c 5-6`
dd1=`echo $str|cut -c 7-8`
str=$2
yy2=`echo $str|cut -c 1-4`
mm2=`echo $str|cut -c 5-6`
dd2=`echo $str|cut -c 7-8`
count_day=`expr $dd2 - $dd1`
while [ $yy2 -ne $yy1 -o $mm2 -ne $mm1 ]
do
        mm2=`expr $mm2 - 1`
        [ $mm2 -eq 0 ] && mm2=12 && yy2=`expr $yy2 - 1`
        aaa=`cal $mm2 $yy2`
        bbb=`echo $aaa|awk '{print $NF}'`
echo $bbb
        count_day=`expr $count_day + $bbb`
done
echo $count_day
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP