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 相关文章推荐
如何解决django配置settings时遇到Could not import settings 'conf.local'
Nov 18 Python
Python函数式编程指南(四):生成器详解
Jun 24 Python
Pycharm远程调试openstack的方法
Nov 21 Python
spark: RDD与DataFrame之间的相互转换方法
Jun 07 Python
django用户登录和注销的实现方法
Jul 16 Python
Python之列表实现栈的工作功能
Jan 28 Python
python使用pymongo操作mongo的完整步骤
Apr 13 Python
如何通过50行Python代码获取公众号全部文章
Jul 12 Python
详解解决Python memory error的问题(四种解决方案)
Aug 08 Python
PyCharm下载和安装详细步骤
Dec 17 Python
Python 如何利用ffmpeg 处理视频素材
Nov 27 Python
Python中的嵌套循环详情
Mar 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来实现网络服务
2009/09/15 PHP
PHP中对各种加密算法、Hash算法的速度测试对比代码
2014/07/08 PHP
php简单实现无限分类树形列表的方法
2015/03/27 PHP
php生成不重复随机数、数组的4种方法分享
2015/03/30 PHP
php通过exif_read_data函数获取图片的exif信息
2015/05/21 PHP
php变量与数组相互转换的方法(extract与compact)
2016/12/02 PHP
thinkphp框架使用JWTtoken的方法详解
2019/10/10 PHP
javascript中判断一个值是否在数组中并没有直接使用
2012/12/17 Javascript
jQuery实现contains方法不区分大小写的方法
2015/02/13 Javascript
vue日期组件 支持vue1.0和2.0
2017/01/09 Javascript
Jquery uploadify 多余的Get请求(404错误)的解决方法
2017/01/26 Javascript
Bootstrap3多级下拉菜单
2017/02/24 Javascript
NUXT SSR初级入门笔记(小结)
2019/12/16 Javascript
Layui弹框中数据表格中可双击选择一条数据的实现
2020/05/06 Javascript
vue3 watch和watchEffect的使用以及有哪些区别
2021/01/26 Vue.js
[14:20]刀塔大凶女神互压各路奇葩屌丝
2014/05/16 DOTA
Python实现短网址ShortUrl的Hash运算实例讲解
2015/08/10 Python
python实现生命游戏的示例代码(Game of Life)
2018/01/24 Python
详解Python中如何写控制台进度条的整理
2018/03/07 Python
使用python 3实现发送邮件功能
2018/06/15 Python
Pytorch使用MNIST数据集实现CGAN和生成指定的数字方式
2020/01/10 Python
利用keras使用神经网络预测销量操作
2020/07/07 Python
Python实现画图软件功能方法详解
2020/07/28 Python
Python抓包并解析json爬虫的完整实例代码
2020/11/03 Python
pip install命令安装扩展库整理
2021/03/02 Python
CSS Grid布局教程之什么是网格布局
2014/12/30 HTML / CSS
html5 canvas 画图教程案例分析
2012/11/23 HTML / CSS
华为旗下电子商务平台:华为商城
2016/08/06 全球购物
攀岩、滑雪、徒步旅行装备:Black Diamond Equipment
2019/08/16 全球购物
社区禁毒工作方案
2014/06/02 职场文书
2014年小学工作总结
2014/11/26 职场文书
巴黎圣母院观后感
2015/06/10 职场文书
聘任通知书
2015/09/21 职场文书
解析Java中的static关键字
2021/06/14 Java/Android
python中subplot大小的设置步骤
2021/06/28 Python
VS2019连接MySQL数据库的过程及常见问题总结
2021/11/27 MySQL