使用 Python 查找本月的最后一天的方法匯總
記住每個(gè)月的最后一天并確定這一天可能具有挑戰(zhàn)性。 你有沒(méi)有想過(guò)應(yīng)該有一個(gè)計(jì)算機(jī)程序可以用幾行代碼向你顯示任何一年任何一個(gè)月的最后一天?
本文將教我們?nèi)绾蝿?chuàng)建 Python 程序,讓我們使用標(biāo)準(zhǔn) Python 庫(kù)輕松找到該月的最后一天。 我們將使用內(nèi)置庫(kù)(如 calendar 和 datetime)以及一些第三方庫(kù)(如 pandas 和 arrow)在 Python 中查找月份的最后一天。
使用 Python 中的日歷庫(kù)查找月份的最后一天
在本節(jié)中,我們將使用內(nèi)置的 Python 庫(kù)日歷來(lái)查找該月的最后一天。
該程序使用日歷子函數(shù) monthrange,它接受兩個(gè)參數(shù)參數(shù),年和月,并返回鍵值對(duì)值 (week_day_of_first_day, number_of_days)。
第一個(gè)值表示該月的第一個(gè)工作日(0 是星期一,6 是星期日),而第二個(gè)值表示該月的最后一天。
import calendar last_day = calendar.monthrange(2000, 1) print(last_day)
一月有 31 天,在 2000 年,第一天是星期六。
輸出:
讓我們通過(guò)提供一些閏年作為輸入來(lái)檢查程序,看看它是否在 Python 中正確找到了該月的最后一天。
import calendar last_day1 = calendar.monthrange(2000, 2) print(last_day1) last_day2 = calendar.monthrange(2004, 2) print(last_day2)
閏年將相應(yīng)顯示。
輸出:
使用 Python 中的 DateTime 模塊查找該月的最后一天
datetime 庫(kù)也是一個(gè)內(nèi)置庫(kù),用于在 Python 中查找該月的最后一天。
從每個(gè)月的第一天減去一天以找到該月的最后一天
當(dāng)月份和年份作為輸入提供時(shí),此程序會(huì)查找該月的最后一天。
import datetime year = 2001 month = 2 v = datetime.date(year + int(month / 12), (month % 12) + 1, 1) - datetime.timedelta(days=1) print(v)
讓我們分解一下代碼:
第一行導(dǎo)入日期時(shí)間庫(kù)。 創(chuàng)建了兩個(gè)變量,year 和 month,它們接受年和月的輸入。 子函數(shù) datetime.date() 將參數(shù)內(nèi)的三個(gè)值作為日期。
該程序使用的邏輯是,從該月的第一天返回前一天會(huì)將我們帶到上個(gè)月的最后一天。 這為我們提供了除 12 月以外所有月份的最后一天,這將我們帶到了前一年的最后一天。
該程序使用以下行將 1 加到 12 月的年份以解決此問(wèn)題:
datetime.date(year + int(month / 12)
類(lèi)似地,對(duì)于月份,如果是 12 月,程序會(huì)在月份 %12 的模數(shù)上加 1。
這會(huì)將月份設(shè)置為 1,其天數(shù)與 12 相同,但不會(huì)更改當(dāng)前年份。 最后,使用 datetime.timedelta(days=1) 函數(shù)從當(dāng)前日期中減去一天。
輸出:
使用 datetime 庫(kù)執(zhí)行此操作的另一種方法是創(chuàng)建一個(gè)方法并從中返回兩個(gè)值,一個(gè)用于 12 月,另一個(gè)用于其余月份。 讓我們檢查下面的程序。
import datetime def last_day_of_month(date): if date.month == 12: return date.replace(day=31) return date.replace(month=date.month + 1, day=1) - datetime.timedelta(days=1) print(last_day_of_month(datetime.date(2022, 10, 25)))
使用參數(shù)日期創(chuàng)建了一個(gè)方法 last_day_of_month。 在 if 語(yǔ)句中,使用 date.month == 12
檢查月份是否為十二月。
如果條件為真,日期將替換為 date.replace(day=31)
。 否則,通過(guò)遞增 month=date.month + 1 將日期替換為第一天和下一個(gè)月,然后從中減去一天,使日期成為給定月份的最后一天。
下面給出一個(gè)例子:
return date.replace(month=date.month + 1, day=1) - datetime.timedelta(days=1)
最后,通過(guò)傳遞日期 datetime.date()
來(lái)調(diào)用該方法,然后將其打印出來(lái)。 它提供了比前面的示例更直接的解決方案。
輸出:
2022-10-31
使用存儲(chǔ)在數(shù)組中的預(yù)加載日期使用 for 循環(huán)查找該月的最后一天
另一個(gè)使用 datetime 庫(kù)的例子是創(chuàng)建一個(gè)包含該月最后幾天的數(shù)組,循環(huán)運(yùn)行它,然后讓 datetime 庫(kù)過(guò)濾掉無(wú)效的日期。
請(qǐng)參閱下面的示例代碼。
from datetime import datetime def find_last_day(year, month): end_days = [31, 30, 29, 28, 27] for i in end_days: try: date = datetime(year, month, i) except ValueError: continue else: return date.date() return None print(find_last_day(2020, 2))
該程序使用帶有兩個(gè)參數(shù)的方法 find_last_day()
,年和月。 在數(shù)組 end_days 中,存儲(chǔ)了可能的最后幾天。
創(chuàng)建一個(gè) for 循環(huán),運(yùn)行 end_days 中的元素?cái)?shù)。 在 try 塊內(nèi),變量使用 datetime() 子函數(shù)存儲(chǔ)日期。
月和年的值根據(jù)參數(shù)設(shè)置,日值中存儲(chǔ)i。
在 except 塊內(nèi),給出了 ValueError 的條件,它丟棄變量 date 中的 i 值以獲得無(wú)效的月份值。 然后使用 continue 重新運(yùn)行循環(huán)。
如果找到有效值,該方法會(huì)在 else 塊中返回日期。 最后,使用 return None 使該方法不返回任何其他值。
該程序從給定的數(shù)組中搜索適當(dāng)?shù)娜掌谥怠?對(duì)于 December,循環(huán)找到 31 并返回值; 對(duì)于像 11 月這樣的月份,只有 30 是可能的,所以它會(huì)在那天返回。
同樣,2 月 31 日和 30 日也是不可能的,因此循環(huán)遍歷它們。 如果給定的年份是閏年,則循環(huán)返回 29; 否則,返回 28。
最后,通過(guò)傳遞二月份和 2020 年來(lái)調(diào)用該方法。
輸出:
2020-02-29
正如我們所見(jiàn),2020 年 2 月是閏年。
打印日歷年所有月份的最后一天以查找該月的最后一天
庫(kù) datetime 也可用于在 Python 中查找日歷年中所有月份的最后一天并將它們?nèi)看蛴〕鰜?lái)。 讓我們看一下程序。
import datetime def month_end(date): next_month = date.replace(day=28) + datetime.timedelta(days=4) return next_month - datetime.timedelta(days=next_month.day) for month in range(1, 13): print(month_end(datetime.date(2022, month, 1)))
讓我們分解一下代碼:
創(chuàng)建了一個(gè)帶有參數(shù)日期的方法 month_end。 在此方法中,變量 next_month 獲取日期并使用 date.replace(day=28) 將日期替換為 28,因?yàn)槊總€(gè)月最少有 28 天。
替換值后,將向該值添加 4 天以將日期移動(dòng)到下個(gè)月的第一天或第二天,具體取決于上個(gè)月的天數(shù)。
假設(shè)當(dāng)前日期是 2000, 3, 4,這個(gè)月的日期值是 4。從日期中減去這一天的值將得到上個(gè)月的最后一天 - 2000, 2, 28; 該程序中使用了此邏輯。
變量 next_month 中的日期從其自身中減去,并使用以下語(yǔ)法從方法中返回:
return next_month - datetime.timedelta(days=next_month.day)
我們創(chuàng)建了一個(gè) for 循環(huán),它使用實(shí)例月份在 (1,13) 的范圍內(nèi)運(yùn)行循環(huán)。 在循環(huán)內(nèi),方法 month_end 通過(guò)傳遞 datetime.date 來(lái)調(diào)用,為該方法提供年和日。
月份被替換為在 for 循環(huán)中使用的實(shí)例月份,以將 12 個(gè)月傳遞給該方法。
for month in range(1, 13): print(month_end(datetime.date(2022, month, 1)))
輸出:
2022-01-31
2022-02-28
2022-03-31
2022-04-30
2022-05-31
2022-06-30
2022-07-31
2022-08-31
2022-09-30
2022-10-31
2022-11-30
2022-12-31
輸出中顯示的是日歷年的所有最后幾天。
使用 Arrow 庫(kù)查找該月的最后一天
這是一個(gè)可用于日期操作的第三方 Python 庫(kù)。 它將用于在 Python 中查找該月的最后一天。
該程序使用 Arrow 子函數(shù) utcnow() 獲取當(dāng)前世界時(shí)。 它使用 ceil('month').date
查找月份的上限。
import arrow print(arrow.utcnow().ceil('month').date())
輸出:
2022-10-31
該代碼給出了當(dāng)月的最后一個(gè)日期。
使用 Pandas 模塊查找本月的最后一天
本節(jié)使用第三方 Python 庫(kù) Pandas 來(lái)查找該月的最后一天。 在這里,程序?qū)肓藘蓚€(gè)庫(kù)包——datetime 和 pandas。
創(chuàng)建一個(gè)方法 check_month_end 接受一個(gè)參數(shù)日期。 此方法采用參數(shù) date 并使用 date + pd.offsets.MonthEnd(0)
添加該月的剩余天數(shù)。
下面是示例代碼:
from datetime import datetime import pandas as pd def check_month_end(date): return date + pd.offsets.MonthEnd(0) print(check_month_end(datetime(2005, 2, 6))) print(check_month_end(datetime(2004, 2, 29)))
輸出
2005-02-28 00:00:00
2004-02-29 00:00:00
輸出采用 Pandas 時(shí)間戳格式,并顯示該月的最后一天。
使用 Pandas 檢查某一天是否是該月的最后一天
Pandas 可用于檢查給定日期是否是該月的最后一天。 與之前的幾個(gè)程序不同,這個(gè)程序接受用戶輸入并檢查給定日期是否有效。
該程序使用參數(shù)值來(lái)檢查它是否匹配使用 date + pd.offsets.MonthEnd(0) == date
的月末。 該方法在被調(diào)用時(shí)返回布爾值。
請(qǐng)參閱提供的示例代碼。
from datetime import datetime import pandas as pd def check_month_end(date): return date + pd.offsets.MonthEnd(0) == date print(check_month_end(datetime(1996, 5, 16))) print(check_month_end(datetime(1996, 5, 31)))
輸出:
False
True
總結(jié)
在本文中,我們學(xué)習(xí)了使用 datetime 和 calendar 等內(nèi)置庫(kù)以及 arrow 和 pandas 等第三方庫(kù)在 Python 中查找月份最后一天的各種方法。
到此這篇關(guān)于使用 Python 查找本月的最后一天的文章就介紹到這了,更多相關(guān)Python本月的最后一天內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
基于python解線性矩陣方程(numpy中的matrix類(lèi))
這篇文章主要介紹了基于python解線性矩陣方程(numpy中的matrix類(lèi)),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-10-10Python實(shí)現(xiàn)TCP探測(cè)目標(biāo)服務(wù)路由軌跡的原理與方法詳解
這篇文章主要介紹了Python實(shí)現(xiàn)TCP探測(cè)目標(biāo)服務(wù)路由軌跡的原理與方法,結(jié)合實(shí)例形式分析了Python TCP探測(cè)目標(biāo)服務(wù)路由軌跡的原理、實(shí)現(xiàn)方法及相關(guān)操作注意事項(xiàng),需要的朋友可以參考下2019-09-09Django1.7+python 2.78+pycharm配置mysql數(shù)據(jù)庫(kù)
這篇文章主要介紹了Django1.7+python 2.78+pycharm配置mysql數(shù)據(jù)庫(kù)的相關(guān)資料,需要的朋友可以參考下2016-10-10使用matplotlib實(shí)現(xiàn)在同一個(gè)窗口繪制多個(gè)圖形
這篇文章主要介紹了使用matplotlib實(shí)現(xiàn)在同一個(gè)窗口繪制多個(gè)圖形問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-08-08Python中使用dwebsocket實(shí)現(xiàn)后端數(shù)據(jù)實(shí)時(shí)刷新
dwebsocket是Python中一款用于實(shí)現(xiàn)WebSocket協(xié)議的庫(kù),可用于后端數(shù)據(jù)實(shí)時(shí)刷新。在Django中結(jié)合使用dwebsocket和Channels,可以實(shí)現(xiàn)前后端的實(shí)時(shí)通信,支持雙向數(shù)據(jù)傳輸和消息推送,適用于實(shí)時(shí)聊天、數(shù)據(jù)監(jiān)控、在線游戲等場(chǎng)景2023-04-04對(duì)python操作kafka寫(xiě)入json數(shù)據(jù)的簡(jiǎn)單demo分享
今天小編就為大家分享一篇對(duì)python操作kafka寫(xiě)入json數(shù)據(jù)的簡(jiǎn)單demo,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-12-12python實(shí)現(xiàn)簡(jiǎn)易計(jì)算器功能
這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)簡(jiǎn)易計(jì)算器功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-02-02解決python 在for循環(huán)并且pop數(shù)組的時(shí)候會(huì)跳過(guò)某些元素的問(wèn)題
這篇文章主要介紹了解決python 在for循環(huán)并且pop數(shù)組的時(shí)候會(huì)跳過(guò)某些元素的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-12-12