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写的图片蜘蛛人代码
Aug 27 Python
python和shell变量互相传递的几种方法
Nov 20 Python
Python统计文件中去重后uuid个数的方法
Jul 30 Python
Python通过命令开启http.server服务器的方法
Nov 04 Python
使用python存储网页上的图片实例
May 22 Python
pytorch中的embedding词向量的使用方法
Aug 18 Python
Python使用matplotlib 画矩形的三种方式分析
Oct 31 Python
Django对接支付宝实现支付宝充值金币功能示例
Dec 17 Python
aws 通过boto3 python脚本打pach的实现方法
May 10 Python
Python OpenCV快速入门教程
Apr 17 Python
Python提取PDF指定内容并生成新文件
Jun 09 Python
python异步的ASGI与Fast Api实现
Jul 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 adodb介绍
2009/03/19 PHP
php 生成WML页面方法详解
2009/08/09 PHP
php判断访问IP的方法
2015/06/19 PHP
php mysqli查询语句返回值类型实例分析
2016/06/29 PHP
PHP性能测试工具xhprof安装与使用方法详解
2018/04/29 PHP
一段实时更新的时间代码
2006/07/07 Javascript
CSS鼠标响应事件经过、移动、点击示例介绍
2013/09/04 Javascript
js动态控制table的tr、td增加及删除的具体实现
2014/04/30 Javascript
js获取网页可见区域、正文以及屏幕分辨率的高度
2014/05/15 Javascript
JS简单模拟触发按钮点击功能的方法
2015/11/30 Javascript
Bootstrap项目实战之首页内容介绍(全)
2016/04/25 Javascript
jQuery使用eraser.js插件实现擦除、刮刮卡效果的方法【附eraser.js下载】
2017/04/28 jQuery
Vue.js鼠标悬浮更换图片功能
2017/05/17 Javascript
在vue 中使用 less的教程详解
2018/09/26 Javascript
vue组件中watch props根据v-if动态判断并挂载DOM的问题
2019/05/12 Javascript
Vue+element 解决浏览器自动填充记住的账号密码问题
2019/06/11 Javascript
JS实现横向跑马灯效果代码
2020/04/20 Javascript
vue-cli4.x创建企业级项目的方法步骤
2020/06/18 Javascript
从零学Python之入门(四)运算
2014/05/27 Python
Python编码类型转换方法详解
2016/07/01 Python
python3实现钉钉消息推送的方法示例
2019/03/14 Python
django formset实现数据表的批量操作的示例代码
2019/12/06 Python
Python requests模块基础使用方法实例及高级应用(自动登陆,抓取网页源码)实例详解
2020/02/14 Python
用60行代码实现Python自动抢微信红包
2021/02/04 Python
HTML5 Canvas图像模糊完美解决办法
2018/02/06 HTML / CSS
SIXPAD智能健身仪英国官网:革命性的训练装备品牌
2018/09/27 全球购物
C++的几个面试题附答案
2016/08/03 面试题
财务会计实习报告体会
2013/12/20 职场文书
《小鹰学飞》教学反思
2014/04/23 职场文书
奥巴马经典演讲稿
2014/09/13 职场文书
部门2014年度工作总结
2014/11/12 职场文书
倡议书的格式写法
2015/04/28 职场文书
小学德育工作总结2015
2015/05/12 职场文书
2015年审计人员工作总结
2015/05/26 职场文书
委托收款证明
2015/06/23 职场文书
详解在SQLPlus中实现上下键翻查历史命令的功能
2022/03/18 SQL Server