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实现微信模板消息
Dec 21 Python
如何用itertools解决无序排列组合的问题
May 18 Python
Python学习小技巧之列表项的排序
May 20 Python
python利用smtplib实现QQ邮箱发送邮件
May 20 Python
创建pycharm的自定义python模板方法
May 23 Python
Python使用Opencv实现图像特征检测与匹配的方法
Oct 30 Python
python图形开发GUI库pyqt5的详细使用方法及各控件的属性与方法
Feb 14 Python
利用OpenCV中对图像数据进行64F和8U转换的方式
Jun 03 Python
Python参数传递及收集机制原理解析
Jun 05 Python
PyCharm+Miniconda3安装配置教程详解
Feb 16 Python
Python list列表删除元素的4种方法
Nov 01 Python
Python turtle编写简单的球类小游戏
Mar 31 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中去掉字符串首尾空格的方法
2012/05/19 PHP
ThinkPHP入口文件设置及相关注意事项分析
2014/12/05 PHP
php判断对象是派生自哪个类的方法
2015/06/20 PHP
php自定义分页类完整实例
2015/12/25 PHP
PHP mysql事务问题实例分析
2016/01/18 PHP
PHP单例模式应用示例【多次连接数据库只实例化一次】
2018/12/18 PHP
显示、隐藏密码
2006/07/01 Javascript
Iframe thickbox2.0使用的方法
2009/03/05 Javascript
javascript 设计模式之单体模式 面向对象学习基础
2010/04/18 Javascript
清空上传控件input file的值
2010/07/03 Javascript
二叉树先序遍历的非递归算法具体实现
2014/01/09 Javascript
node.js中的events.emitter.listeners方法使用说明
2014/12/10 Javascript
javascript学习笔记整理(概述、变量、数据类型简介)
2015/10/25 Javascript
基于JavaScript实现轮播图原理及示例
2020/04/10 Javascript
Angular实现的简单定时器功能示例
2017/12/28 Javascript
vue使用pdfjs显示PDF可复制的实现方法
2018/12/14 Javascript
JavaScript实现shuffle数组洗牌操作示例
2019/01/03 Javascript
在Echarts图中给坐标轴加一个标识线markLine
2020/07/20 Javascript
纯js+css实现在线时钟
2020/08/18 Javascript
Python编程中用close()方法关闭文件的教程
2015/05/24 Python
python 将列表中的字符串连接成一个长路径的方法
2018/10/23 Python
Python用字典构建多级菜单功能
2019/07/11 Python
Python turtle绘画象棋棋盘
2019/08/21 Python
Django Docker容器化部署之Django-Docker本地部署
2019/10/09 Python
PyCharm Anaconda配置PyQt5开发环境及创建项目的教程详解
2020/03/24 Python
python zip,lambda,map函数代码实例
2020/04/04 Python
什么是Python中的顺序表
2020/06/02 Python
CSS3实现大小不一的粒子旋转加载动画
2016/04/21 HTML / CSS
JSF如何进行表格处理及取值
2012/08/06 面试题
简短证婚人证婚词
2014/01/09 职场文书
人事主管岗位职责
2015/02/04 职场文书
2015年党建工作总结
2015/03/30 职场文书
幼儿园中班班级总结
2015/08/10 职场文书
大学生村官驻村工作心得体会
2016/01/23 职场文书
redis 解决库存并发问题实现数量控制
2022/04/08 Redis
解决Python保存文件名太长OSError: [Errno 36] File name too long
2022/05/11 Python