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 相关文章推荐
pyv8学习python和javascript变量进行交互
Dec 04 Python
Python调用C/C++动态链接库的方法详解
Jul 22 Python
python daemon守护进程实现
Aug 27 Python
听歌识曲--用python实现一个音乐检索器的功能
Nov 15 Python
快速入门python学习笔记
Dec 06 Python
CentOS下Python3的安装及创建虚拟环境的方法
Nov 28 Python
python爬取酷狗音乐排行榜
Feb 20 Python
python numpy实现文件存取的示例代码
May 26 Python
对Python生成器、装饰器、递归的使用详解
Jul 19 Python
教你使用Sublime text3搭建Python开发环境及常用插件安装另分享Sublime text3最新激活注册码
Nov 12 Python
python爬虫如何解决图片验证码
Feb 14 Python
Python爬虫入门案例之回车桌面壁纸网美女图片采集
Oct 16 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 parse_url 一个好用的函数
2009/10/03 PHP
php环境下利用session防止页面重复刷新的具体实现
2014/01/09 PHP
php中3种方法删除字符串中间的空格
2014/03/10 PHP
Yii2使用小技巧之通过 Composer 添加 FontAwesome 字体资源
2014/06/22 PHP
php数组添加元素方法小结
2014/12/20 PHP
php使用MySQL保存session会话的方法
2015/06/18 PHP
YII CLinkPager分页类扩展增加显示共多少页
2016/01/29 PHP
功能强大的PHP发邮件类
2016/08/29 PHP
PHP strcmp()和strcasecmp()的区别实例
2016/11/05 PHP
PHP静态成员变量
2017/02/14 PHP
javascript最常用与实用的创建类的代码
2010/08/12 Javascript
js 调用本地exe的例子(支持IE内核的浏览器)
2012/12/26 Javascript
JavaScript中双叹号!!作用示例介绍
2014/09/21 Javascript
jquery实现导航固定顶部的效果仿蘑菇街
2014/10/22 Javascript
基于JavaScript实现鼠标悬浮弹出跟随鼠标移动的带箭头的信息层
2016/01/18 Javascript
AngularJS路由切换实现方法分析
2017/03/17 Javascript
js自定义瀑布流布局插件
2017/05/16 Javascript
Vue 中使用vue2-highcharts实现曲线数据展示的方法
2018/03/05 Javascript
NodeJS使用Range请求实现下载功能的方法示例
2018/10/12 NodeJs
JavaScript常用工具函数库汇总
2020/09/17 Javascript
nuxt.js添加环境变量,区分项目打包环境操作
2020/11/06 Javascript
[54:15]DOTA2-DPC中国联赛 正赛 DLG vs Dragon BO3 第二场2月1日
2021/03/11 DOTA
Python数据分析之真实IP请求Pandas详解
2016/11/18 Python
基于python神经卷积网络的人脸识别
2018/05/24 Python
对tensorflow中tf.nn.conv1d和layers.conv1d的区别详解
2020/02/11 Python
Pycharm快捷键配置详细整理
2020/10/13 Python
利物浦足球俱乐部官方网上商店:Liverpool FC Official Store
2018/01/13 全球购物
如何利用find命令查找文件
2015/02/07 面试题
大四自我鉴定
2014/02/08 职场文书
商务英语专业毕业生求职信
2014/07/06 职场文书
我为党旗添光彩演讲稿
2014/09/10 职场文书
清洁工岗位职责
2015/02/13 职场文书
2015年宣传思想工作总结
2015/05/22 职场文书
病假证明模板
2015/06/19 职场文书
学前班教学反思
2016/02/24 职场文书
教你如何用cmd快速登录服务器
2022/06/10 Servers