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实现百度关键词排名查询
Mar 30 Python
用Python代码来绘制彭罗斯点阵的教程
Apr 03 Python
python select.select模块通信全过程解析
Sep 20 Python
django的settings中设置中文支持的实现
Apr 28 Python
Python 虚拟空间的使用代码详解
Jun 10 Python
如何运行带参数的python脚本
Nov 15 Python
Linux下升级安装python3.8并配置pip及yum的教程
Jan 02 Python
tensorflow 保存模型和取出中间权重例子
Jan 24 Python
解决Python图形界面中设置尺寸的问题
Mar 05 Python
python 实现仿微信聊天时间格式化显示的代码
Apr 17 Python
django为Form生成的label标签添加class方式
May 20 Python
python datetime时间格式的相互转换问题
Jun 11 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
php getimagesize 上传图片的长度和宽度检测代码
2010/05/15 PHP
php中用foreach来操作数组的代码
2011/07/17 PHP
php对文件进行hash运算的方法
2015/04/03 PHP
通过PHP简单实例介绍文件上传
2015/12/16 PHP
thinkphp 5框架实现登陆,登出及session登陆状态检测功能示例
2019/10/10 PHP
在Windows上安装Node.js模块的方法
2011/09/25 Javascript
简单的ajax连接库分享(不用jquery的ajax)
2014/01/19 Javascript
javascript将数字转换整数金额大写的方法
2015/01/27 Javascript
jQuery性能优化技巧分析
2015/02/20 Javascript
js实现带按钮的上下滚动效果
2015/05/12 Javascript
javascript控制图片播放的实现代码
2020/07/29 Javascript
jQuery dataTables与jQuery UI 对话框dialog的使用教程
2016/09/02 Javascript
Bootstrap标签页(Tab)插件使用方法
2017/03/21 Javascript
Vue.js如何优雅的进行form validation
2017/04/07 Javascript
详解基于Node.js的微信JS-SDK后端接口实现代码
2017/07/15 Javascript
JavaScrip关于创建常量的知识点
2017/12/07 Javascript
jquery动态添加以及遍历option并获取特定样式名称的option方法
2018/01/29 jQuery
基于cropper.js封装vue实现在线图片裁剪组件功能
2018/03/01 Javascript
React路由管理之React Router总结
2018/05/10 Javascript
JavaScript 替换所有匹配内容及正则替换方法
2020/02/12 Javascript
js表达式与运算符简单操作示例
2020/02/15 Javascript
Vue实现附件上传功能
2020/05/28 Javascript
[02:33]2018 DOTA2亚洲邀请赛回顾视频 再次拾起那些美妙的时刻
2018/04/10 DOTA
[01:01:41]DOTA2-DPC中国联赛 正赛 PSG.LGD vs Magma BO3 第二场 1月31日
2021/03/11 DOTA
Python探索之爬取电商售卖信息代码示例
2017/10/27 Python
Bottle框架中的装饰器类和描述符应用详解
2017/10/28 Python
Python socket套接字实现C/S模式远程命令执行功能案例
2018/07/06 Python
柏林通行证:Berlin Pass
2018/04/11 全球购物
PHP经典面试题
2016/09/03 面试题
介绍一下XMLHttpRequest对象的常用方法和属性
2013/05/24 面试题
2013英文求职信模板范文
2013/11/15 职场文书
国际经济与贸易专业求职信
2014/07/10 职场文书
2014党员自我评议表范文
2014/09/20 职场文书
公司联欢会主持词
2015/07/04 职场文书
《生物入侵者》教学反思
2016/02/16 职场文书
python_tkinter事件类型详情
2022/03/20 Python