Python:计算两个日期之间的天数

这次用python编写了计算两个日期之间的天数的代码,编写的思路是在编写中逐步产生的,过程比较流畅。有几点分析的细节需要点出来:

分析

  • 1. 是否为闰年,2月的天数

    • 能被4整除但不能被100整除,或能被400整除的年份即为闰年
  • 2. 两个日期是同一个月怎么处理
    • 后者减去前者即可
  • 3. 两个日期同年,且所在月份相邻怎么处理
  • 4. 两个日期同年,但所在月份不相邻怎么处理
    • 上面这两个问题的提出是为了引出一种计算思路,即可以将第一个日期所在月份剩余的天数和第二个日期所在月份已经过的天数先加起来,有点“掐头去尾”的意思,于是,如果两个月份相邻,则已经得到结果;若两个月份不相邻,则将中间月份的天数依次加起来即可
  • 5. 两个日期所在年份相邻怎么处理
  • 6. 两个日期所在年份不相邻怎么处理
    • 这两个问题与上面处理3,4问题的思路一样——先“掐头去尾”,计算第一个日期所在年份剩余的天数和第二个日期所在年份已经经过的天数,在看是否需要计算中间年份的天数

代码块

#判断是否为闰年
def isLeapYear(year):if (year%4 ==0 and year%100 !=0 ) or (year%400 == 0):return Trueelse:return Falsedef daysBetweenDates(year1, month1, day1, year2, month2, day2):
#根据year1是否为闰年,选择year1当年每月的天数列表if isLeapYear(year1):daysOfMonths1 = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]else:daysOfMonths1 = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]year_temp = year2 - year1 month_temp = month2 - month1if year_temp == 0:            #同年if month_temp == 0:       #同年且同月days = day2 -day1else:                     #同年但不同月days = daysOfMonths1[month1-1]-day1+day2  #“掐头去尾”i = 1 #计算中间月份,若月份相邻则month_temp==1,该循环不会被执行while i< month_temp:days += daysOfMonths1[month1+i-1]                i += 1else:    #不同年#根据是否为闰年,得到year2每月天数列表if isLeapYear(year2):    daysOfMonths2 = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]else:daysOfMonths2 = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]#第一个日期所在年份剩余天数,首先计算第一个月份剩余天数days = daysOfMonths1[month1-1]-day1i = 1while (month1+i<=12):#若该月不是12月,即 有剩余月份,则执行该循环,累加本年所剩余天数days += daysOfMonths1[month1+i-1]i += 1#计算第二个日期所在年份已经经过的天数days += day2#先计算当月已经经过的天数if month2 > 1:#若不是1月,则计算已经经过的月份的天数j = 1while j < month2:days += daysOfMonths2[j-1]j += 1#计算中间年份的天数,此时temp_year > 1(即不相邻年份,#因为以上的“掐头去尾”已经可以得出年份相邻这种情况的结果了)k = 1while k < year_temp:if isLeapYear(year1 + k):days += 366else:days += 365k += 1return(days)   

测试与遇到的一点问题

2012,1,1~~2012,2,28 有58天
2011,6,30 ~~2017,6,30 有2192天

可以从Excel上得出两个日期之间的天数,来进行更多的测试。

但是不知从哪里开始,有一天的误差:
1900,1,1~~1999,12,31 代码计算出有36523天,而Excel上有36524天。

有了解的小伙伴,还望不吝赐教哈~~~


Python:计算两个日期之间的天数相关推荐

  1. 如何利用计算机计算天数,如何应用Win10系统电脑中的计算器计算两个日期之间的天数?...

    如何应用Win10系统电脑中的计算器计算两个日期之间的天数? 相信很多小伙伴都有在使用windows10系统的电脑,其中的计算器如何才能用来计算两个日期之间的天数呢?方法很简单,下面小编就来为大家介绍 ...

  2. 微软面试题目(一) 计算两个日期之间的天数

    微软的面试,没能参加啊,只好打听了下题目,其中一题是在20分钟内写出:计算两个日期之间天数的方法.昨天晚上想了一下,今天实现了一下,经过调试,差不多一个小时才弄好,惭愧啊 代码如下: /******* ...

  3. sql年月日加减法,计算两个日期之间的天数

    1.年月日加减法(时间字段为  hiredate,表名为 emp) DB2 selecthiredate -5 day as hd_sub_5day,hiredate +5 day as hd_add ...

  4. 计算两个日期之间的天数,你知道哪些函数能够计算呢?

    有时候我们需要计算两个日期之间的天数,一般情况下只需要计算一两个的话可以直接口算,但是整个表格的日期都需要计算出他们之间的天数,还是用口算的方法吗?当然不能这么浪费时间!Excel中有计算两个日期之间 ...

  5. python 计算两个日期之间的月数差额

    用python 计算两个日期之间的月数 一个多月认为是2个月 结果: beginTime="2022-03-31" endTime="2022-05-31" # ...

  6. java怎么计算相隔多少天_java计算两个日期之间相差天数和相隔天数详解

    大家看到文章标题"两个日期之间相差天数和相隔天数",是否有疑惑呢!从中文字面理解,"相差"和"相隔"是有区别的,然而就是这些区别害死很多人, ...

  7. JavaScript:实现计算两个日期之间的天数算法(附完整源码)

    JavaScript:实现计算两个日期之间的天数算法 const isLeap = (year) => {if (year % 400 === 0) return trueelse if (ye ...

  8. Go获取n天前或后的日期、日期转秒时间戳、计算两个日期之间的天数差

    获取n天前或后的日期: // GetBeforeTime 获取n天前的秒时间戳.日期时间戳 // _day为负则代表取前几天,为正则代表取后几天,0则为今天 func GetBeforeTime(_d ...

  9. php 求两个日期之间的天数_php计算两个日期之间的天数

    php计算两个日期之间的天数2017-12-21 14:29 我有两个日期: 开始日期: 2007-03-24 结束日期: 2009-06-26 现在我需要找到这两者之间的区别在以下形式: 2年,3个 ...

最新文章

  1. 排序算法—sort(),stable_sort(),merge()
  2. 高级转录组分析和R语言数据可视化第12期 (线上线下同时开课)
  3. 马化腾:我创办腾讯的这些年
  4. 黑盒测试和白盒的区别,有哪些常见的白盒黑盒测试方法
  5. 手写bind_深入理解 JavaScript 之手写 call, apply, bind 方法
  6. 云炬VB开发笔记 2可视化编程基础
  7. 2021年度最佳开源软件榜单出炉!
  8. OJ1042: 数列求和3(递推思想)
  9. github编程语言排名_这是每种主要编程语言的Hello World应用示例-全部在一个GitHub存储库中
  10. jpa使用注解传递对象_注解(下)
  11. SharePoint JavaScript API in application pages
  12. Valgrind 使用简单说明-转
  13. springcloud集成sleuth
  14. java写原生js_[Java教程]原生JS拖拽
  15. 捷联式惯导系统初始对准
  16. ps的基础知识与教程
  17. 【卫星影像三维重建】完整的卫星立体重建
  18. html 鼠标单击显示div,3.1.2 利用鼠标单击实现DIV的选取
  19. Combating Spyware in the Enterprise
  20. NANDFLASH与PSRAM

热门文章

  1. 1.QML的介绍-windows
  2. 阿里蚂蚁金服、蘑菇街、腾讯、去哪儿等实习面试
  3. ERROR 1045 (28000): Access denied for user ‘ODBC‘@‘localhost‘ (using password: YES)可能解决方法之一
  4. 动态设置important样式
  5. php个性签名,如何在discuz论坛帖子的个性签名前后插_php
  6. 64位rhel4 u6上安装oracle 10g rac,在64位RHEL4 U6上安装Oracle 10g RAC
  7. 云架构及设计-阿里云
  8. 程序员面试需要的软技能
  9. Horizon Client 配置设置和命令行选项
  10. [20150909]Quartz定时调度CronTrigger时间配置格式说明与实例