国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 編程 > Python > 正文

python 計(jì)算兩個(gè)日期相差多少個(gè)月實(shí)例代碼

2020-02-16 01:34:18
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

近期,由于業(yè)務(wù)需要計(jì)算兩個(gè)日期之前相差多少個(gè)月。我在網(wǎng)上找了很久,結(jié)果發(fā)現(xiàn)萬(wàn)能的python,居然沒有一個(gè)模塊計(jì)算兩個(gè)日期的月數(shù),像Java、C#之類的高級(jí)語(yǔ)言,都會(huì)有(date1-date2).months的現(xiàn)成方法,覺得不可思議。說(shuō)句實(shí)在的,一直覺得python 的日期處理模塊真心不好用。

哦,對(duì)了,別跟我說(shuō) datetime, calendar, dateutil 這些模塊,因?yàn)槲叶荚囘^(guò)了,都沒用。有個(gè)竟然算出來(lái)還有錯(cuò)。datetime.timedelta只能計(jì)算出日時(shí)分秒。對(duì)年月卻不支持。網(wǎng)上一搜,一大堆的。

dateutil.rrule這個(gè)例子是我好不容易找到的,請(qǐng)看我的測(cè)試結(jié)果:

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ù)月)

import datetimeimport calendar as cd1 = datetime.date(2016, 2, 29)d2 = datetime.date(2019, 3, 31)def calmonths(startdate, enddate):# 計(jì)算兩個(gè)日期相隔月差samemonthdate = Nonetry: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 = 0decimalmonth = 0.0if samemonthdate > enddate:premanthdate = Nonetry: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).daysholdmonths = (premanthdate.year - startdate.year) * 12 + premanthdate.month - startdate.monthdecimalmonth = (enddate - premanthdate).days / currmonthdayselif samemonthdate < enddate:nextmonthdate = Nonetry: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).daysholdmonths = (samemonthdate.year - startdate.year) * 12 + samemonthdate.month - startdate.monthdecimalmonth = (enddate - samemonthdate).days / currmonthdayselse:holdmonths = (enddate.year - startdate.year) * 12 + enddate.month - startdate.monthreturn holdmonths, decimalmonthmonths = calmonths(d1, d2)print(f"months={months}")

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持武林站長(zhǎng)站。

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 南澳县| 定日县| 仙居县| 苗栗县| 呼和浩特市| 苍山县| 唐海县| 马公市| 长兴县| 康定县| 金溪县| 泰来县| 池州市| 固始县| 宜宾市| 怀柔区| 临汾市| 绥中县| 万年县| 鄂托克旗| 锦州市| 鄂托克前旗| 隆子县| 松潘县| 怀化市| 涪陵区| 中江县| 德化县| 黄陵县| 泗洪县| 铜梁县| 灵丘县| 蒲江县| 碌曲县| 安福县| 洪江市| 全南县| 娱乐| 岳阳县| 大理市| 苍溪县|