计算两个日期之间的间隔--不使用包

本文介绍了一种使用Python和Shell脚本实现的日期计算方法。该方法通过增加天数并处理月份和年份进位来计算从一个指定日期到另一个指定日期之间的所有日期。涉及到闰年的判断及不同月份天数的处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

1、python实现

2、shell实现


程序均采用天数+1,日期进位思路

1、python实现

ac_date = "20200225"
nx_date = "20200303"

ac_year = int(ac_date[:4])
ac_month = int(ac_date[4:6])
ac_day = int(ac_date[6:8])

print(ac_date)
while int(ac_date) < int(nx_date):
    ac_day += 1
    lunarYear=False
    isMonthEnd = False
    if (ac_year % 4 == 0 and ac_year % 100 != 0) or ac_year %400 ==0:
        lunarYear = True
    if ac_day == 29 and ac_month == 2 and not lunarYear:
        isMonthEnd = True
    if ac_day == 30 and ac_month == 2 and lunarYear:
        isMonthEnd = True
    if ac_day == 31 and ac_month in [2,4,6,9,11]:
        isMonthEnd = True
    if ac_day == 32 and ac_month in [1,3,5,7,8,10,12]:
        isMonthEnd = True
    if isMonthEnd:
        ac_day = 1
        ac_month += 1
        if ac_month == 13:
            ac_month = 1
            ac_year += 1
    ac_date = str(ac_year)
    ac_date += str(ac_month)if ac_month > 10 else "0"+str(ac_month)
    ac_date += str(ac_day)if ac_day > 10 else "0"+str(ac_day)
    if ac_date < nx_date:
        print(ac_date)

2、shell实现

date1=20200225
date2=20200303
y1=`echo $date1 | cut -c 1-4`
m1=`echo $date1 | cut -c 5-6`
d1=`echo $date1 | cut -c 7-8`
echo $date1
while [ $date1 -lt $date2 ]
do
    d1=`expr $d1 + 1`
    lunarYear=0
    isMonthEnd=0
    y_1=`expr $y1 % 4`
    y_2=`expr $y1 % 100`
    y_3=`expr $y1 % 400`
    if [ $y_1 -eq 0 ] && [ $y_2 -ne 0 ] || [ $y_3 -eq 0 ];then
        lunarYear=1
    fi
    if [ $d1 -eq 29 ] && [ $m1 -eq 2 ] && [ $lunarYear -ne 1 ];then
        isMonthEnd=1
    fi
    if [ $d1 -eq 30 ] && [ $m1 -eq 2 ] && [ $lunarYear -eq 1 ];then
        isMonthEnd=1
    fi
    if [ $d1 -eq 31 ];then
        case $m1 in
            04|06|09|11)
            isMonthEnd=1
            ;;
        esac
    fi
    if [ $d1 -eq 32 ];then
        case $m1 in
            01|03|05|07|08|10|12)
            isMonthEnd=1
            ;;
        esac
    fi
    if [ $isMonthEnd -eq 1 ];then
        d1=1
        m1=`expr $m1 + 1`
        if [ $m1 -eq 13 ];then
            m1=1
            y1=`expr $y1 + 1`
        fi
    fi
    date1=`printf "%d%02d%02d\n" $y1 $m1 $d1`
    if [ $date1 -lt $date2 ];then
        echo $date1
    fi
done

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值