分享

答粉丝问|用python计算时间间隔

 算法与编程之美 2020-08-08
序言
如图1.1中关于如何用python去计算两个时间(年月日)相隔多少天,简单了解一下接下来的几种解法。

图1.1 问题

代码内容简介  
 

首先,先用简单的方法,那就是引用python第三方库中的功能直接计算出结果。引用datetime库。

fromdatetime import timedelta, datetime

a,b,c =map(int,input("请输入开始时间(以.间隔):").split("."))

d,e,f =map(int,input("请输入结束时间(以.间隔):").split("."))

a =datetime(d,e,f) - datetime(a,b,c)

print(a)

这里直接从datetime库引出timedelta功能,timedelta主要是用于计算时间跨度,通过使用datetime传入时间参数,然后用两个datetime去相减,然后返回的答案就是timedat。也就是要求的时间间隔。

图2.1 运行结果

上面是通过引用第三方库的方式来解决的,那么还能用自己的方式去解决这个问题。
主要思路为将两个时间区间分为三段,第一段为开始那年的剩余天数,第二段为中间的整年的总天数,第三段是最后一年过了的天数。分段时要注意的是判断各年是平年还是闰年。如为同年按月以同一方法解决。最后时间相加得到答案。
代码如下:   
day1=[1,31,59,90,120,151,181,212,243,273,304,334,365]              
day2  =[1,31,60,91,121,152,182,213,244,274,305,335,366]

首先需要把平闰年的区别分出来,这里给出了day1和day2来分别表示平闰年每月之前的总天数。

year,month,day = map(int,input("请输入开始年月日(以.隔开):").split("."))

if year % 100 == 0:

     if year % 400 == 0:

         kaishi = 366-(day2[month - 1]+ day)

     if year % 400 != 0:

         kaishi = 365-(day1[month - 1]+ day)

else:

     if year % 4 == 0:

        kaishi = 366-(day2[month - 1]+ day)

     else:

         kaishi = 365-(day1[month - 1]+ day)

这一步是通过输入开始的日期来计算当前年份的剩余天数,这里主要涉及一个对该年是平年还是闰年的判断,这个在后面也会一直用的。根据定义,如果被100整除时,能被400整除就是闰年,不能被400整除就是平年;如果不能被100整除,那能被4整除就是闰年,不然就是平年,然后通过该年总天数减去从上面给出输入月份之前的天数和该月的天数最后得到。

year1,month1,dayy =map(int,input("请输入结束年月日(以.隔开):").split("."))

if year % 100 == 0:

     if year1 % 400 == 0:

         jieshu = day2[month1 - 1] +dayy

     if year1 % 400 != 0:

         jieshu = day1[month1 - 1] +dayy

else:

     if year1 % 4 == 0:

         jieshu = day2[month1 - 1]  +dayy

     else:

         jieshu = day1[month1 - 1] +day

这个和上面一样,通过先判断平闰年来确定最后一年过去的天数,方法同上。

runnian = 0

pingnian = 0

if year != year1:

     for i in range(year + 1,year1):

         if i % 100 == 0:

            if i % 400 == 0:

                runnian += 1

            else:

                pingnian += 1

         else:

            if i % 4 == 0:

                runnian += 1

            else:

                pingnian += 1

     zongday = runnian*366 +pingnian*365 + jieshu + kaishi

这里先给runnian和pingnian赋值为0,当开始与结束年份不同时,用for循环判断两个年份之间的年份的闰年和平年,分别加在runnian和pingnian上,最后把中间每年的天数加起来(包括闰年天数,平年天数,开始一年剩余的天数,最后一年剩余的天数),得到总和zongday。

else:

     if year1 %100 == 0:

         if year1 % 400 == 0:

            zongday = jieshu -(366-kaishi)

         else:

            zongday = jieshu - (365 -kaishi)

     else:

         if year1 % 4 == 0:

            zongday = jieshu - (366 -kaishi)

         else:

            zongday = jieshu - (365 - kaishi)

print("两时间间隔%d天"%zongday)

这是当两个年份相同时,依然需要判断平闰年,用结束时间过的天数减开始时间过的天数就得到两日期的差,得到zongday。

最后输出zongday,得到想要的结果,如图2.2。

图2.2 运行结果

总结

用python解决问题一定先找能不能直接用到第三方库,如果不能用第三方库那就只能用自己的方法解决。但是第三方库一定会方便得多。
END

实习编辑   |   贾婧媛

责     编    |   李和龙

 where2go 团队


微信号:算法与编程之美          

    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多