python 计算两个日期相差多少个月实例代码


Posted in Python onMay 24, 2017

近期,由于业务需要计算两个日期之前相差多少个月。我在网上找了很久,结果发现万能的python,居然没有一个模块计算两个日期的月数,像Java、C#之类的高级语言,都会有(date1-date2).months的现成方法,觉得不可思议。说句实在的,一直觉得python 的日期处理模块真心不好用。

哦,对了,别跟我说 datetime, calendar, dateutil 这些模块,因为我都试过了,都没用。有个竟然算出来还有错。datetime.timedelta只能计算出日时分秒。对年月却不支持。网上一搜,一大堆的。

dateutil.rrule这个例子是我好不容易找到的,请看我的测试结果:

import datetime

from dateutil import rrule

d1 = datetime.date(2016, 2, 29)
d2 = datetime.date(2019, 3, 31)

months = rrule.rrule(rrule.MONTHLY, dtstart=d1, until=d2).count()

print(f"months={months}")

python 计算两个日期相差多少个月实例代码

看到这样的结果,我只能呵呵了。

废话不多少,献上自己写的代码:

该代码返回,(月,小数月)

import datetime

import calendar as c



d1 = datetime.date(2016, 2, 29)

d2 = datetime.date(2019, 3, 31)



def calmonths(startdate, enddate):

# 计算两个日期相隔月差

samemonthdate = None

try:

samemonthdate = datetime.date(enddate.year, enddate.month,

startdate.day)

except Exception as e:

print(e)

samemonthdate = datetime.date(enddate.year, enddate.month,

c.monthrange(enddate.year,

enddate.month)[1])


holdmonths = 0

decimalmonth = 0.0

if samemonthdate > enddate:

premanthdate = None

try:

premanthdate = datetime.date(enddate.year, enddate.month - 1,

startdate.day)

except Exception as e:

print(e)

premanthdate = datetime.date(enddate.year, enddate.month - 1,

c.monthrange(

enddate.year,

enddate.month - 1)[1])

currmonthdays = (samemonthdate - premanthdate).days

holdmonths = (premanthdate.year - startdate.year

) * 12 + premanthdate.month - startdate.month

decimalmonth = (enddate - premanthdate).days / currmonthdays


elif samemonthdate < enddate:

nextmonthdate = None

try:

nextmonthdate = datetime.date(enddate.year, enddate.month + 1,

startdate.day)

except Exception as e:

nextmonthdate = datetime.date(enddate.year, enddate.month + 1,

c.monthrange(

enddate.year,

enddate.month + 1)[1])

currmonthdays = (nextmonthdate - samemonthdate).days

holdmonths = (samemonthdate.year - startdate.year

) * 12 + samemonthdate.month - startdate.month

decimalmonth = (enddate - samemonthdate).days / currmonthdays


else:

holdmonths = (enddate.year - startdate.year

) * 12 + enddate.month - startdate.month


return holdmonths, decimalmonth


months = calmonths(d1, d2)


print(f"months={months}")

python 计算两个日期相差多少个月实例代码

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python ZipFile模块详解
Nov 01 Python
Python应用03 使用PyQT制作视频播放器实例
Dec 07 Python
pandas 获取季度,月度,年度首尾日期的方法
Apr 11 Python
Python实现多属性排序的方法
Dec 05 Python
在python中实现求输出1-3+5-7+9-......101的和
Apr 02 Python
python中pandas库中DataFrame对行和列的操作使用方法示例
Jun 14 Python
python 识别登录验证码图片功能的实现代码(完整代码)
Jul 03 Python
简单了解python关键字global nonlocal区别
Sep 21 Python
Python使用scapy模块发包收包
May 07 Python
一文搞懂Python Sklearn库使用
Aug 23 Python
Python中递归以及递归遍历目录详解
Oct 24 Python
Python线程池与GIL全局锁实现抽奖小案例
Apr 13 Python
django基础之数据库操作方法(详解)
May 24 #Python
python bottle框架支持jquery ajax的RESTful风格的PUT和DELETE方法
May 24 #Python
Python生成密码库功能示例
May 23 #Python
Python计算两个日期相差天数的方法示例
May 23 #Python
基于Python_脚本CGI、特点、应用、开发环境(详解)
May 23 #Python
浅谈django model的get和filter方法的区别(必看篇)
May 23 #Python
Python常用内置模块之xml模块(详解)
May 23 #Python
You might like
AMFPHP php远程调用(RPC, Remote Procedure Call)工具 快速入门教程
2010/05/10 PHP
解析php函数method_exists()与is_callable()的区别
2013/06/21 PHP
解析php5配置使用pdo
2013/07/03 PHP
PHP中CURL的CURLOPT_POSTFIELDS参数使用细节
2014/03/17 PHP
php解决约瑟夫环示例
2014/04/09 PHP
基于win2003虚拟机中apache服务器的访问
2017/08/01 PHP
在 Laravel 6 中缓存数据库查询结果的方法
2019/12/11 PHP
PHP vsprintf()函数格式化字符串操作原理解析
2020/07/14 PHP
js弹出层之1:JQuery.Boxy (二)
2011/10/06 Javascript
ExtJS实现文件下载的方法实例
2013/11/09 Javascript
JavaScript改变HTML元素的样式改变CSS及元素属性
2013/11/12 Javascript
jQuery自定义添加&quot;$&quot;与解决&quot;$&quot;冲突的方法
2015/01/19 Javascript
浅谈EasyUI中Treegrid节点的删除
2015/03/01 Javascript
javascript中对Date类型的常用操作小结
2016/05/19 Javascript
JSON对象 详解及实例代码
2016/10/18 Javascript
js记录点击某个按钮的次数-刷新次数为初始状态的实例
2017/02/15 Javascript
解析Vue2.0双向绑定实现原理
2017/02/23 Javascript
用vue构建多页面应用的示例代码
2017/09/20 Javascript
Vue2.x-使用防抖以及节流的示例
2021/03/02 Vue.js
重命名批处理python脚本
2013/04/05 Python
简单解决Python文件中文编码问题
2015/11/22 Python
Python决策树和随机森林算法实例详解
2018/01/30 Python
Python 调用 Outlook 发送邮件过程解析
2019/08/08 Python
Pandas的数据过滤实现
2021/01/15 Python
python之openpyxl模块的安装和基本用法(excel管理)
2021/02/03 Python
HTML5+JS实现俄罗斯方块原理及具体步骤
2013/11/29 HTML / CSS
一个不错的HTML5 Canvas多层点击事件监听实例
2014/04/29 HTML / CSS
HTML5 通过Vedio标签实现视频循环播放的示例代码
2020/08/05 HTML / CSS
理肤泉英国官网:La Roche-Posay英国
2019/01/14 全球购物
个人自我鉴定总结
2014/03/25 职场文书
会议主持词开场白
2015/05/28 职场文书
2016教师校本培训心得体会
2016/01/08 职场文书
毕业生自我鉴定范文
2019/05/13 职场文书
毕业生的自我鉴定表范文
2019/05/16 职场文书
Spring Bean的实例化之属性注入源码剖析过程
2021/06/13 Java/Android
Oracle中DBLink的详细介绍
2022/04/29 Oracle