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 文件和输入输出小结
Oct 09 Python
python简单程序读取串口信息的方法
Mar 13 Python
python使用urlparse分析网址中域名的方法
Apr 15 Python
Python实现Youku视频批量下载功能
Mar 14 Python
python在线编译器的简单原理及简单实现代码
Feb 02 Python
通过python顺序修改文件名字的方法
Jul 11 Python
Python脚本修改阿里云的访问控制列表的方法
Mar 08 Python
PyTorch搭建多项式回归模型(三)
May 22 Python
Python数组并集交集补集代码实例
Feb 18 Python
Python 列表反转显示的四种方法
Nov 16 Python
PyCharm常用配置和常用插件(小结)
Feb 06 Python
解决Pytorch修改预训练模型时遇到key不匹配的情况
Jun 05 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 模拟POST提交的2种方法详解
2013/06/17 PHP
PHP防范SQL注入的具体方法详解(测试通过)
2014/05/09 PHP
thinkphp项目如何自定义微信分享描述内容
2017/02/20 PHP
PHP的mysqli_set_charset()函数讲解
2019/01/23 PHP
php报错502badgateway解决方法
2019/10/11 PHP
Javascript与flash交互通信基础教程
2008/08/07 Javascript
jQuery弹出层插件简化版代码下载
2008/10/16 Javascript
prototype 学习笔记整理
2009/07/17 Javascript
Grid得到选择行数据的方法总结
2011/01/17 Javascript
js调试工具console.log()方法查看js代码的执行情况
2014/08/08 Javascript
JS和JQ的event对象区别分析
2014/11/24 Javascript
AngularJs bootstrap搭载前台框架——基础页面
2016/09/01 Javascript
jQuery上传多张图片带进度条样式(DEMO)
2017/03/02 Javascript
js上传图片预览的实现方法
2017/05/09 Javascript
讲解vue-router之什么是动态路由
2018/05/28 Javascript
跟混乱的页面弹窗说再见
2019/04/11 Javascript
vue实现点击按钮“查看详情”弹窗展示详情列表操作
2020/09/09 Javascript
详解ES6实现类的私有变量的几种写法
2021/02/10 Javascript
python调用cmd复制文件代码分享
2013/12/27 Python
Python中的XML库4Suite Server的介绍
2015/04/14 Python
Python编程中运用闭包时所需要注意的一些地方
2015/05/02 Python
python通过openpyxl生成Excel文件的方法
2015/05/12 Python
对Tensorflow中权值和feature map的可视化详解
2018/06/14 Python
python中struct模块之字节型数据的处理方法
2019/08/27 Python
Python 类,property属性(简化属性的操作),@property,property()用法示例
2019/10/12 Python
Python 使用 prettytable 库打印表格美化输出功能
2019/12/26 Python
关于Python解包知识点总结
2020/05/05 Python
python list等分并从等分的子集中随机选取一个数
2020/11/16 Python
python 爬取英雄联盟皮肤并下载的示例
2020/12/04 Python
纯CSS3实现Material Design效果
2017/03/09 HTML / CSS
美国台面电器和厨具品牌:KitchenAid
2019/04/12 全球购物
存储过程的优缺点是什么
2015/01/10 面试题
ktv收银员岗位职责
2013/12/16 职场文书
天下第一关导游词
2015/02/06 职场文书
关于党风廉政建设宣传教育月的活动总结!
2019/08/08 职场文书
React如何使用axios请求数据并把数据渲染到组件
2022/08/05 Javascript