专栏首页算法与编程之美答粉丝问|用python计算时间间隔

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

序言

如图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解决问题一定先找能不能直接用到第三方库,如果不能用第三方库那就只能用自己的方法解决。但是第三方库一定会方便得多。

本文分享自微信公众号 - 算法与编程之美(algo_coding),作者:李和龙

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-11-04

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 数据库|Flask解决跨域问题

    最近在做一个前后端分离的项目时,需要前端向后端发起请求然后得到数据,却始终拿不到后端返回的数据,但是通过浏览器直接访问这个接口是可以得到返回的数据。这让我百思不...

    算法与编程之美
  • 数据库|如何将MySQL完全卸载

    当MySQL没有卸载干净的时候,再重新安装它的时候,会出一些错误。接下来我们来介绍怎么将MySQL卸载干净。

    算法与编程之美
  • 前端|对wps加载项的探究

    WPS 加载项是一套基于 Web 技术用来扩展 WPS 应用程序的解决方案。每个 WPS 加载项都对应打开了一个网页,并通过调用网页中 JavaScript 方...

    算法与编程之美
  • 11-条件表达式、三元运算符

    凯茜的老爸
  • 如何安装Virtual Box的VBox Guest Additions扩展程序

    版权声明:本文为博主汪子熙原创文章,未经博主允许不得转载。 https://jerry.bl...

    Jerry Wang
  • 【PAT乙级】数素数

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 ...

    喜欢ctrl的cxk
  • 【死磕Java并发】—–J.U.C之并发工具类:CountDownLatch

    在上篇博客中介绍了Java四大并发工具一直的CyclicBarrier,今天要介绍的CountDownLatch与CyclicBarrier有点儿相似。 Cyc...

    用户1655470
  • 为什么初学小白找工作总是被拒绝?

    今天在出差在路上想到了刚入门的初学者经常说的一句话,没有经验的人公司根本不要,面试了几家根本没人搭理,为啥初学小白找工作总是碰壁,第一份工作就是这么难找? 笔者...

    程序员互动联盟
  • 【应用】Python做文本挖掘的情感极性分析

    「情感极性分析」是对带有感情色彩的主观性文本进行分析、处理、归纳和推理的过程。按照处理文本的类别不同,可分为基于新闻评论的情感分析和基于产品评论的情感分析。其中...

    陆勤_数据人网
  • DeepMind 联合创始人加盟 Google AI【智能快讯】

    AI 无处不在的时代,每天都有新的技术与研究成果出现。无论学术界还是商界,技术还是产品,AI 的新发现都源源不断,在带给我们全新视角的同时,也引起我们更深的思考...

    HyperAI超神经

扫码关注云+社区

领取腾讯云代金券