python 计算两个日期相差多少个月
生活随笔
收集整理的這篇文章主要介紹了
python 计算两个日期相差多少个月
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
近期,由于業(yè)務(wù)需要計(jì)算兩個(gè)日期之前相差多少個(gè)月。我在網(wǎng)上找了很久,結(jié)果發(fā)現(xiàn)萬能的python,居然沒有一個(gè)模塊計(jì)算兩個(gè)日期的月數(shù),像Java、C#之類的高級(jí)語言,都會(huì)有(date1-date2).months的現(xiàn)成方法,覺得不可思議。說句實(shí)在的,一直覺得python 的日期處理模塊真心不好用。
哦,對(duì)了,別跟我說 datetime, calendar, dateutil 這些模塊,因?yàn)槲叶荚囘^了,都沒用。有個(gè)竟然算出來還有錯(cuò)。datetime.timedelta只能計(jì)算出日時(shí)分秒。對(duì)年月卻不支持。網(wǎng)上一搜,一大堆的。
dateutil.rrule這個(gè)例子是我好不容易找到的,請(qǐng)看我的測(cè)試結(jié)果:
''' 遇到問題沒人解答?小編創(chuàng)建了一個(gè)Python學(xué)習(xí)交流QQ群:857662006 尋找有志同道合的小伙伴,互幫互助,群里還有不錯(cuò)的視頻學(xué)習(xí)教程和PDF電子書! ''' import datetimefrom dateutil import rruled1 = 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}")
看到這樣的結(jié)果,我只能呵呵了。
廢話不多少,獻(xiàn)上自己寫的代碼:
該代碼返回,(月,小數(shù)月)
''' 遇到問題沒人解答?小編創(chuàng)建了一個(gè)Python學(xué)習(xí)交流QQ群:857662006 尋找有志同道合的小伙伴,互幫互助,群里還有不錯(cuò)的視頻學(xué)習(xí)教程和PDF電子書! ''' import datetime import calendar as c d1 = datetime.date(2016, 2, 29) d2 = datetime.date(2019, 3, 31) def calmonths(startdate, enddate): # 計(jì)算兩個(gè)日期相隔月差 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 / currmonthdayselif 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 / currmonthdayselse: holdmonths = (enddate.year - startdate.year ) * 12 + enddate.month - startdate.monthreturn holdmonths, decimalmonthmonths = calmonths(d1, d2)print(f"months={months}")總結(jié)
以上是生活随笔為你收集整理的python 计算两个日期相差多少个月的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python中操作数据库中游标的使用方法
- 下一篇: python flask解决上传下载的问