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实现dnspod自动更新dns解析的方法
Feb 14 Python
python批量提交沙箱问题实例
Oct 08 Python
详尽讲述用Python的Django框架测试驱动开发的教程
Apr 22 Python
Python单例模式实例详解
Mar 01 Python
python matplotlib坐标轴设置的方法
Dec 05 Python
基于windows下pip安装python模块时报错总结
Jun 12 Python
Django 中自定义 Admin 样式与功能的实现方法
Jul 04 Python
python处理document文档保留原样式
Sep 23 Python
tensorflow 实现打印pb模型的所有节点
Jan 23 Python
python中return不返回值的问题解析
Jul 22 Python
Python 使用双重循环打印图形菱形操作
Aug 09 Python
详解Python中openpyxl模块基本用法
Feb 23 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生成条形图的方法
2014/12/10 PHP
JAVASCRIPT IE 与 FF中兼容问题小结
2009/02/18 Javascript
jquery 日期分离成年月日的代码
2010/05/14 Javascript
JS代码优化技巧之通俗版(减少js体积)
2011/12/23 Javascript
JQuery拖动表头边框线调整表格列宽效果代码
2014/09/10 Javascript
使用jQuery不判断浏览器高度解决iframe自适应高度问题
2014/12/16 Javascript
BOOTSTRAP时间控件显示在模态框下面的bug修复
2015/02/05 Javascript
jquery插件qrcode在线生成二维码
2015/04/26 Javascript
基于jQuery Circlr插件实现产品图片360度旋转
2015/09/20 Javascript
AngularJS国际化详解及示例代码
2016/08/18 Javascript
Javascript数组循环遍历之forEach详解
2016/11/07 Javascript
解决ionic和angular上拉加载的问题
2017/08/03 Javascript
JS实现定时任务每隔N秒请求后台setInterval定时和ajax请求问题
2017/10/15 Javascript
Vue官网todoMVC示例代码
2018/01/29 Javascript
electron中使用bootstrap的示例代码
2018/11/06 Javascript
微信小程序利用云函数获取手机号码
2019/12/17 Javascript
JavaScript对象原型链原理详解
2020/02/05 Javascript
vue实现全屏滚动效果(非fullpage.js)
2020/03/07 Javascript
[01:20:30]OG vs LGD 2018国际邀请赛淘汰赛BO3 第四场 8.26
2018/08/30 DOTA
python脚本实现查找webshell的方法
2014/07/31 Python
简介Python设计模式中的代理模式与模板方法模式编程
2016/02/02 Python
Python实现登陆文件验证方法
2018/10/06 Python
对python中的float除法和整除法的实例详解
2019/07/20 Python
利用Python自动化操作AutoCAD的实现
2020/04/01 Python
AmazeUI 单选框和多选框的实现示例
2020/08/18 HTML / CSS
美国家喻户晓的保健品品牌:Vitamin World(维他命世界)
2016/08/19 全球购物
全球领先的全景影像品牌:Insta360
2019/08/21 全球购物
马歇尔耳机官网:Marshall Headphones
2020/02/04 全球购物
关于雷锋的演讲稿
2014/05/10 职场文书
体育之星事迹材料
2014/05/11 职场文书
史上最牛辞职信
2015/05/13 职场文书
师范生见习总结范文
2015/06/23 职场文书
2016党员干部反腐倡廉心得体会
2016/01/13 职场文书
比较几种Redis集群方案
2021/06/21 Redis
python数字图像处理:图像简单滤波
2022/06/28 Python
win10电脑关机快捷键是哪个 win10快速关机的几种方法
2022/08/14 数码科技