Python使用Pendulum優(yōu)雅處理日期與時間
在日常開發(fā)中,日期和時間的處理一直是讓人頭疼的事情。雖然 Python 內置的 datetime 模塊功能強大,但使用起來冗長、容易出錯,對時區(qū)支持也不夠友好。而 pendulum 正是為了解決這些痛點而生的現(xiàn)代化日期時間庫。
本文將全面介紹 pendulum 的特點、用法以及典型應用場景,并與 datetime 模塊進行對比,幫助你在實際項目中優(yōu)雅地處理時間邏輯。
一、為什么選擇 Pendulum
在你接觸 pendulum 之前,可能已經(jīng)習慣于這樣寫代碼:
from datetime import datetime, timedelta, timezone now = datetime.now() later = now + timedelta(days=3)
然而,如果你需要處理時區(qū)轉換、自然語言式時間表達、日期范圍、持續(xù)時間等需求時,datetime 的語法就顯得冗長而繁瑣。
而使用 pendulum,代碼變成這樣:
import pendulum now = pendulum.now("Asia/Shanghai") later = now.add(days=3)
是不是清晰不少?
二、安裝 Pendulum
Pendulum 可以通過 pip 快速安裝:
pip install pendulum
安裝完成后,導入方式非常簡單:
import pendulum
三、核心功能與語法解析
3.1 獲取當前時間
pendulum.now() # 使用本地時區(qū) pendulum.now("UTC") # 使用指定時區(qū) pendulum.today("Asia/Shanghai") # 獲取今天0點 pendulum.yesterday("Asia/Shanghai") # 獲取昨天 pendulum.tomorrow("Asia/Shanghai") # 獲取明天
3.2 創(chuàng)建時間對象
dt = pendulum.datetime(2025, 6, 4, 15, 30, tz="Asia/Shanghai")
相比原生 datetime.datetime,pendulum.datetime 支持直接指定時區(qū)字符串,無需手動構造 timezone 對象。
還可以通過 from_format 快速解析:
dt = pendulum.from_format("2025-06-04 15:30", "YYYY-MM-DD HH:mm", tz="Asia/Shanghai")
3.3 自然語言解析時間
pendulum.parse("2025-06-04T15:30:00+08:00") pendulum.parse("2025-06-04 15:30:00", tz="Asia/Shanghai")
3.4 時間加減(Duration)
now = pendulum.now() three_days_later = now.add(days=3) one_week_ago = now.subtract(weeks=1)
甚至可以鏈式調用:
now.add(days=1).subtract(hours=2)
3.5 時間比較
dt1 = pendulum.datetime(2025, 6, 1) dt2 = pendulum.datetime(2025, 6, 4) print(dt1 < dt2) # True print(dt1.diff(dt2).in_days()) # 3
支持 .is_before()、.is_after()、.is_same_day() 等方法。
3.6 時區(qū)處理
dt = pendulum.datetime(2025, 6, 4, 15, 30, tz="UTC") local_dt = dt.in_timezone("Asia/Shanghai")
還可以輕松獲取所有時區(qū):
pendulum.timezones # 返回所有支持的時區(qū)列表
3.7 格式化與字符串轉換
now = pendulum.now() print(now.to_datetime_string()) # "2025-06-04 15:30:00" print(now.format("YYYY-MM-DD HH:mm")) # "2025-06-04 15:30"
支持使用 moment.js 的格式化語法,非常自然。
3.8 持續(xù)時間(Durations)
duration = pendulum.duration(days=2, hours=5, minutes=30) print(duration.total_minutes()) # 2*24*60 + 5*60 + 30 = 3090
你也可以對時間進行差值計算:
start = pendulum.datetime(2025, 6, 1) end = pendulum.datetime(2025, 6, 4) diff = end - start print(diff.in_days()) # 3
四、日期區(qū)間與范圍處理
處理時間段是數(shù)據(jù)分析、報表等任務的常見需求。pendulum 提供 period 和 intervals 工具:
start = pendulum.datetime(2025, 6, 1) end = pendulum.datetime(2025, 6, 10) period = pendulum.period(start, end) for dt in period.range("days"): print(dt.to_date_string())
還可以使用:
period.days # 獲取所有日期組成的列表 period.includes(pendulum.datetime(2025, 6, 4)) # 判斷某個時間是否在范圍內
五、與 datetime 的兼容性
pendulum 是 datetime 的完全替代品,它繼承了 datetime.datetime,并向下兼容所有用法。
from datetime import datetime import pendulum dt = pendulum.now() isinstance(dt, datetime) # True
這意味著你可以在現(xiàn)有項目中逐步替換 datetime 為 pendulum,無需大改動。
六、典型應用場景
6.1 多時區(qū)日程應用
event_time = pendulum.parse("2025-06-04 18:00", tz="America/New_York") user_time = event_time.in_timezone("Asia/Shanghai") print(user_time.format("YYYY-MM-DD HH:mm"))
6.2 自動任務觸發(fā)器
now = pendulum.now() if now.is_weekday() and now.hour == 9: print("開始執(zhí)行每日工作任務")
6.3 數(shù)據(jù)報表日期范圍
start = pendulum.today().subtract(days=6) end = pendulum.today() for day in pendulum.period(start, end).range("days"): print(f"處理報表:{day.to_date_string()}")
6.4 人類可讀的時間間隔(humanize)
dt = pendulum.now().subtract(days=2, hours=3) print(dt.diff_for_humans()) # “2 days ago”
支持中英文,適合用于日志、用戶提示信息等。
七、與其他時間庫對比
特性 | datetime | arrow | pendulum |
---|---|---|---|
原生支持時區(qū) | ? | ? | ?(強) |
人性化輸出 | ? | ? | ?(更好) |
日期范圍處理 | ? | ? | ? |
國際化支持 | ? | ? | ?(多語言) |
與原生兼容性 | ? | ? | ? |
安裝包體積 | 小 | 中 | 中 |
pendulum 結合了 arrow 的易用性和 datetime 的兼容性,是目前處理時間的最佳選擇之一。
八、總結
pendulum 是一個現(xiàn)代化、直觀且功能豐富的 Python 時間處理庫。無論你是開發(fā)金融系統(tǒng)、定時任務調度、日志系統(tǒng),還是需要處理復雜的時間邏輯,pendulum 都能大大簡化你的代碼。
推薦理由總結:
- API 更加直觀
- 對時區(qū)支持優(yōu)秀
- 支持日期范圍
- 高度兼容 datetime
- 支持人類可讀輸出
- 性能優(yōu)于 arrow
如果你還在用 datetime 并苦于寫一堆格式轉換、手動處理時區(qū)和計算間隔,不妨從下一個項目開始試試 pendulum,相信你會愛上它。
到此這篇關于Python使用Pendulum優(yōu)雅處理日期與時間的文章就介紹到這了,更多相關Python Pendulum處理日期與時間內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Python基于自然語言處理開發(fā)文本摘要系統(tǒng)
自然語言處理(NLP)是人工智能領域中一個重要的研究方向,而文本摘要作為NLP的一個重要應用,在信息爆炸的時代具有重要意義,下面我們來看看如何開發(fā)一個基于Python的文本摘要系統(tǒng)吧2025-04-04Pytorch實現(xiàn)將label變成one hot編碼的兩種方式
這篇文章主要介紹了Pytorch實現(xiàn)將label變成one hot編碼的兩種方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-02-02