如何用python写一个计算日期间隔的程序?
前言
为什么想起来写一个这样的程序呢?
前几天聊天的时候,突然想计算一下两个日期之间的间隔,于是去搜索类似功能的网站。
然后就在想这个问题会很困难嘛,我能不能也写一个小程序呢?
可能这里就有朋友要说了,明明有现成的模块能之间计算日期间隔,你为什么不用呢?
阿这我就是不太想用现成的模块,想自己写一个玩,就像有现成的网站我用完还是想自己写一个了解一下原理。
问题梳理
那么计算日期间隔我们会遇到哪些问题呢?
首先是一个很容易出错的问题:闰年
为什么说闰年这个问题容易出错呢?
因为很多朋友可能对闰年的概念也不是很了解,觉得能被4整除就是闰年。
但其实1900和2100年都不是闰年。
以下是百度百科中对闰年的解释
然后我们用什么方式来计算间隔呢?
首先我们判断第一个日期是第一年的第a天,在判断第二个日期是第二年的第b天,再计算两年的第一天之间的间隔天数c,计算c+b-a,就是最终结果了。
问题解决
首先我们来写一个判断闰年的函数,闰年的英文为Leap Year,所以用函数LY(a)来表示,如果是闰年返回1,不是闰年返回0
def LY(a):
if a>=1582:
if a % 400 == 0:
return 1
elif a % 100 == 0:
return 0
elif a % 4 == 0:
return 1
else:
return 0
else:
if a % 4 == 0:
return 1
else:
return 0
那么核心问题解决了之后,就很简单了,一下是我的全部代码
print("Please enter initial Time(yyyymmdd)")
t0 = input()
print("Please enter a cut-off time(yyyymmdd)")
t1 = input()
y = [31,28,31,30,31,30,31,31,30,31,30,31]
ly = [31,29,31,30,31,30,31,31,30,31,30,31]
y0 = int(t0[0:4])
y1 = int(t1[0:4])
m0 = int(t0[4:6])
m1 = int(t1[4:6])
d0 = int(t0[6:8])
d1 = int(t1[6:8])
def LY(a):
if a>=1582:
if a % 400 == 0:
return 1
elif a % 100 == 0:
return 0
elif a % 4 == 0:
return 1
else:
return 0
else:
if a % 4 == 0:
return 1
else:
return 0
if LY(y0) == 0:
sumy0 = 365
sumd0 = sum(y[0:m0-1]) + d0
else:
sumy0 = 366
sumd0 = sum(ly[0:m0-1]) + d0
if LY(y1) == 0:
sumy1 = 365
sumd1 = sum(y[0:m1-1]) + d1
else:
sumy1 = 366
sumd1 = sum(ly[0:m1-1]) + d1
if y1-y0 == 0:
ans = sumd1 - sumd0
else:
l=0
for i in range(y0,y1):
if LY(i) == 0:
l+=365
else:
l+=366
ans = l + sumd1 -sumd0
print('The interval is {0} days'.format(ans))
input('Press Enter to exit')
运行一下,得到如下结果。
然后我将文件打包为Calculate date interval.exe
上传到了github,可以点击这里来查看。
写在后面
本人只是一个python爱好者,没事写点自己的学习心得,如果有什么错误欢迎来批评指正。
就这样,谢谢大家的观看。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)