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