2000-2099年之间的闰年有25次,
背景需求:
已经制作了对称年月的数字提取,和年月日相等的年份提取
【教学类-48-01】20240205对称的“年”和“月日”(如2030 0302)-CSDN博客文章浏览阅读84次。【教学类-48-01】20240205对称的“年”和“月日”(如2030 0302)https://blog.csdn.net/reasonsummer/article/details/136062477https://blog.csdn.net/reasonsummer/article/details/136062477
【教学类-48-02】20240207“年”和“月”和“日”相等(如2012 1212)-CSDN博客文章浏览阅读834次,点赞25次,收藏22次。【教学类-48-02】20240207“年”和“月”和“日”相等(如2012 1212)https://blog.csdn.net/reasonsummer/article/details/136064823?csdn_share_tail=%7B%22type%22%3A%22blog%22%2C%22rType%22%3A%22article%22%2C%22rId%22%3A%22136064823%22%2C%22source%22%3A%22reasonsummer%22%7D
修改代码,提取所有闰年(有2月29日的年,就是闰年)——今年龙年2024年就有2月29日。
参考代码
python 获取指定范围所有日期_python获取一段时间的所有日期对象-CSDN博客文章浏览阅读680次。python 获取指定范围所有日期方法有很多,这不是唯一的答案。可以根据自己的需要进行修改,代码如下:import datetimedef gen_dates(b_date, days): day = datetime.timedelta(days=1) for i in range(days): yield b_date + day * idef get_date_list(start=None, end=None): if start is Non_python获取一段时间的所有日期对象https://blog.csdn.net/love_521_/article/details/113983984?spm=1001.2101.3001.6650.4&utm_medium=distribute.pc_relevant.none-task-blog-2~default~BlogCommendFromBaidu~Rate-4-113983984-blog-110731910.235%5Ev43%5Epc_blog_bottom_relevance_base6&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2~default~BlogCommendFromBaidu~Rate-4-113983984-blog-110731910.235%5Ev43%5Epc_blog_bottom_relevance_base6&utm_relevant_index=9https://blog.csdn.net/love_521_/article/details/113983984?spm=1001.2101.3001.6650.4&utm_medium=distribute.pc_relevant.none-task-blog-2~default~BlogCommendFromBaidu~Rate-4-113983984-blog-110731910.235%5Ev43%5Epc_blog_bottom_relevance_base6&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2~default~BlogCommendFromBaidu~Rate-4-113983984-blog-110731910.235%5Ev43%5Epc_blog_bottom_relevance_base6&utm_relevant_index=9
重点说明:
代码展示
'''
2900-2100年之间提取闰年
作者:阿夏
日期:2024年2月11日
'''
# https://blog.csdn.net/love_521_/article/details/113983984?spm=1001.2101.3001.6650.4&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7ERate-4-113983984-blog-110731910.235%5Ev43%5Epc_blog_bottom_relevance_base6&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7ERate-4-113983984-blog-110731910.235%5Ev43%5Epc_blog_bottom_relevance_base6&utm_relevant_index=9
import datetime
def gen_dates(b_date, days):
day = datetime.timedelta(days=1)
for i in range(days):
yield b_date + day * i
def get_date_list(start=None, end=None):
if start is None:
start = datetime.datetime.strptime('20180202', '%Y%m%d')
else:
start = datetime.datetime.strptime(start, '%Y%m%d')
if end is None:
# end = datetime.datetime.now()
end = datetime.datetime.strptime('20280202', '%Y%m%d')
else:
end = datetime.datetime.strptime(end, '%Y%m%d')
data = []
for d in gen_dates(start, (end -start).days):
m = datetime.datetime.strftime(d, '%Y%m%d')
data.append(m) # 如果你想添加的为日期类型 m改为 d即可
print(data, data.__len__(), sep='\n')
t=[]
# 遍历
for x in range(len(data)):
b=data[x][0:2]# 提取“年”前2个数字 20240229的20
y=data[x][2:4]# 提取“年”后2个数字 20240229的24
m=data[x][4:6]# 提取“月”2个数字 20240229的02
d=data[x][6:8]# 提取“日”2个数字 20240229的29
if m=='02'and d=='29': # 如果2月有29天
a=b+y
# 合并年月日
print('符合闰年的年份',a,'年')
t.append(a)
print('符合闰年的年份有',len(t),'次')
print('符合闰年的年份列表',t)
# 起始日期
get_date_list(start='10000101', end='99991231')
# get_date_list(start='20000101', end='20991231')
# 40541
# 符合闰年的年份 2000 年
# 符合闰年的年份 2004 年
# 符合闰年的年份 2008 年
# 符合闰年的年份 2012 年
# 符合闰年的年份 2016 年
# 符合闰年的年份 2020 年
# 符合闰年的年份 2024 年
# 符合闰年的年份 2028 年
# 符合闰年的年份 2032 年
# 符合闰年的年份 2036 年
# 符合闰年的年份 2040 年
# 符合闰年的年份 2044 年
# 符合闰年的年份 2048 年
# 符合闰年的年份 2052 年
# 符合闰年的年份 2056 年
# 符合闰年的年份 2060 年
# 符合闰年的年份 2064 年
# 符合闰年的年份 2068 年
# 符合闰年的年份 2072 年
# 符合闰年的年份 2076 年
# 符合闰年的年份 2080 年
# 符合闰年的年份 2084 年
# 符合闰年的年份 2088 年
# 符合闰年的年份 2092 年
# 符合闰年的年份 2096 年
# 符合闰年的年份有 25 次
# 符合闰年的年份列表 ['2000', '2004', '2008', '2012', '2016', '2020', '2024', '2028', '2032', '2036', '2040', '2044', '2048', '2052', '2056', '2060', '2064', '2068', '2072', '2076', '2080', '2084', '2088', '2092', '2096']
结果:
符合闰年的年份 2000 年
符合闰年的年份 2004 年
符合闰年的年份 2008 年
符合闰年的年份 2012 年
符合闰年的年份 2016 年
符合闰年的年份 2020 年
符合闰年的年份 2024 年
符合闰年的年份 2028 年
符合闰年的年份 2032 年
符合闰年的年份 2036 年
符合闰年的年份 2040 年
符合闰年的年份 2044 年
符合闰年的年份 2048 年
符合闰年的年份 2052 年
符合闰年的年份 2056 年
符合闰年的年份 2060 年
符合闰年的年份 2064 年
符合闰年的年份 2068 年
符合闰年的年份 2072 年
符合闰年的年份 2076 年
符合闰年的年份 2080 年
符合闰年的年份 2084 年
符合闰年的年份 2088 年
符合闰年的年份 2092 年
符合闰年的年份 2096 年
符合闰年的年份有 25 次
根据以上数字判断:
1、100年里有25次闰年?
根据以上数字判断:从00开始反复加4年,直到96,(最大数字是99)一共25次。
00、04、08、12……92,96
那么公元1000年到公元9999年的“闰年”日期可能的数量
(9999-1000+1)*25/100=2250年(一百年里25次闰年)
2、并非所有的XX00年都是闰年
可是结果不是2250,而是2182,少了68年
查询网络才知道
也就是说:跨世纪的“XX00年”必须能被400整除才算闰年。下图显示1000 年/400=2.5、3000年/400=7.5不是闰年(红色表示缺失),但2000年/400=5可以整除,就是闰年(绿色)
因此我有写了一个年份代码,测试68次缺少的分别是那些“世纪年”
'''
2900-2100年之间提取闰年,世纪年XX00不是闰年
作者:阿夏
日期:2024年2月11日
'''
start=1000
end=9999
# 遍历所有年份
t=[]
for y in range(start,end+1):
t.append(str(y))
# print(t)
oy=[]# 平年
ly=[]# 闰年
for x in t:
if x[2:4]=='00': #
# print(x)
num=int(x)/400
if num==int(num):
num=int(num)
ly.append(x)
# print(num)
# print('闰年')
else:
num=float(num)
# print(num)
# print('非闰年')
oy.append(x)
else:
pass
print('不符合闰年的世纪年(平年)有',len(oy),'次')
print('不符合闰年的世纪年(平年)列表',oy)
print('符合闰年的世纪年(闰年)有',len(ly),'次')
print('符合闰年的世纪年(闰年)列表',ly)
结果显示,公元1000-公元9999,一共是90个百年,一共有90次XX00年,其中22个世纪整年是闰年,可以被400整除,如1200、1600、2000年等,还有68个世纪整年是平年,如1000、4600、8100等。答案正确。
不符合闰年的世纪年(平年)有 68 次
不符合闰年的世纪年(平年)列表 ['1000', '1100', '1300', '1400', '1500', '1700', '1800', '1900', '2100', '2200', '2300', '2500', '2600', '2700', '2900', '3000', '3100', '3300', '3400', '3500', '3700', '3800', '3900', '4100', '4200', '4300', '4500', '4600', '4700', '4900', '5000', '5100', '5300', '5400', '5500', '5700', '5800', '5900', '6100', '6200', '6300', '6500', '6600', '6700', '6900', '7000', '7100', '7300', '7400', '7500', '7700', '7800', '7900', '8100', '8200', '8300', '8500', '8600', '8700', '8900', '9000', '9100', '9300', '9400', '9500', '9700', '9800', '9900']
符合闰年的世纪年(闰年)有 22 次
符合闰年的世纪年(闰年)列表 ['1200', '1600', '2000', '2400', '2800', '3200', '3600', '4000', '4400', '4800', '5200', '5600', '6000', '6400', '6800', '7200', '7600', '8000', '8400', '8800', '9200', '9600']