300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > 如何用python写一个计算日期间隔的程序?

如何用python写一个计算日期间隔的程序?

时间:2021-08-02 01:22:01

相关推荐

如何用python写一个计算日期间隔的程序?

如何用python写一个计算日期间隔的程序?

文章目录

如何用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 1elif a % 100 == 0:return 0elif a % 4 == 0:return 1else:return 0else:if a % 4 == 0:return 1else: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 1elif a % 100 == 0:return 0elif a % 4 == 0:return 1else:return 0else:if a % 4 == 0:return 1else:return 0if LY(y0) == 0:sumy0 = 365sumd0 = sum(y[0:m0-1]) + d0else:sumy0 = 366sumd0 = sum(ly[0:m0-1]) + d0if LY(y1) == 0:sumy1 = 365sumd1 = sum(y[0:m1-1]) + d1else:sumy1 = 366sumd1 = sum(ly[0:m1-1]) + d1if y1-y0 == 0:ans = sumd1 - sumd0else:l=0for i in range(y0,y1):if LY(i) == 0:l+=365else:l+=366ans = l + sumd1 -sumd0print('The interval is {0} days'.format(ans))input('Press Enter to exit')

运行一下,得到如下结果。

然后我将文件打包为Calculate date interval.exe

上传到了github,可以点击这里来查看。

写在后面

本人只是一个python爱好者,没事写点自己的学习心得,如果有什么错误欢迎来批评指正。

就这样,谢谢大家的观看。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。