目录
程序均采用天数+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