0
点赞
收藏
分享

微信扫一扫

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

玉字璧 2022-02-07 阅读 170

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

文章目录

前言

为什么想起来写一个这样的程序呢?

前几天聊天的时候,突然想计算一下两个日期之间的间隔,于是去搜索类似功能的网站。

然后就在想这个问题会很困难嘛,我能不能也写一个小程序呢?

可能这里就有朋友要说了,明明有现成的模块能之间计算日期间隔,你为什么不用呢?

阿这我就是不太想用现成的模块,想自己写一个玩,就像有现成的网站我用完还是想自己写一个了解一下原理。

问题梳理

那么计算日期间隔我们会遇到哪些问题呢?

首先是一个很容易出错的问题:闰年

为什么说闰年这个问题容易出错呢?

因为很多朋友可能对闰年的概念也不是很了解,觉得能被4整除就是闰年。

但其实1900和2100年都不是闰年。

以下是百度百科中对闰年的解释

image-20220207115130799

然后我们用什么方式来计算间隔呢?

首先我们判断第一个日期是第一年的第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')

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

image-20220207122200346

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

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

写在后面

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

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

举报

相关推荐

0 条评论