国产探花免费观看_亚洲丰满少妇自慰呻吟_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ā)表
主站蜘蛛池模板: 富裕县| 咸丰县| 农安县| 苏尼特左旗| 平度市| 永平县| 浦东新区| 玛多县| 巴彦淖尔市| 大邑县| 克拉玛依市| 林甸县| 枣强县| 积石山| 武定县| 铅山县| 拜泉县| 微山县| 澄城县| 延庆县| 龙游县| 新兴县| 宜春市| 江门市| 韶关市| 旺苍县| 青铜峡市| 新晃| 南昌县| 全椒县| 常熟市| 明星| 呼图壁县| 道真| 永宁县| 红原县| 伊宁市| 顺平县| 天气| 微山县| 栖霞市|