在 Python 開發(fā)中,日期時間處理是高頻需求,無論是日志記錄、數(shù)據(jù)統(tǒng)計,還是定時任務(wù),都需精準(zhǔn)操作日期時間。Python 標(biāo)準(zhǔn)庫中的datetime模塊提供了完整的日期時間處理工具,支持日期創(chuàng)建、格式轉(zhuǎn)換、差值計算等核心功能,無需依賴第三方庫即可滿足多數(shù)場景需求。小編將拆解datetime模塊的核心組件,詳解常用操作,助你高效處理日期時間。
一、datetime 模塊核心組件:四類核心對象
datetime模塊通過四個核心對象封裝日期時間信息,各對象職責(zé)明確,覆蓋不同處理場景:
datetime.date:僅處理日期(年、月、日),如 2025-08-30;
datetime.time:僅處理時間(時、分、秒、微秒),如 14:30:45.123456;
datetime.datetime:同時處理日期與時間,如 2025-08-30 14:30:45,最常用;
datetime.timedelta:表示時間間隔(如 2 天、3 小時),用于日期時間差值計算。
二、datetime 模塊常用操作:從創(chuàng)建到應(yīng)用
(一)創(chuàng)建日期時間對象:獲取當(dāng)前或指定日期時間
獲取當(dāng)前日期時間
通過datetime.now()獲取當(dāng)前本地日期時間,datetime.utcnow()獲取當(dāng)前 UTC 時間(國際標(biāo)準(zhǔn)時間):
TypeScript取消自動換行復(fù)制
from datetime import datetime, date, time
# 獲取當(dāng)前本地日期時間(datetime對象)
current_dt = datetime.now()
print(current_dt) # 輸出:2025-08-30 14:35:22.123456
# 獲取當(dāng)前日期(date對象)
current_date = date.today()
print(current_date) # 輸出:2025-08-30
# 獲取當(dāng)前時間(time對象)
current_time = datetime.now().time()
print(current_time) # 輸出:14:35:22.123456
創(chuàng)建指定日期時間
直接通過對象構(gòu)造函數(shù)傳入?yún)?shù),需注意參數(shù)合法性(如月份 1-12、日期 1-31):
TypeScript取消自動換行復(fù)制
# 創(chuàng)建指定日期時間(2025年10月1日 8:00:00)
specified_dt = datetime(2025, 10, 1, 8, 0, 0)
print(specified_dt) # 輸出:2025-10-01 08:00:00
# 創(chuàng)建指定日期(2025年5月20日)
specified_date = date(2025, 5, 20)
print(specified_date) # 輸出:2025-05-20
(二)日期時間格式轉(zhuǎn)換:在字符串與對象間切換
日期時間對象需轉(zhuǎn)換為字符串才能用于輸出或存儲,字符串也需解析為對象才能進(jìn)行計算,核心依賴strftime()(對象轉(zhuǎn)字符串)與strptime()(字符串轉(zhuǎn)對象)。
對象轉(zhuǎn)字符串:strftime()
通過格式化符號指定輸出格式(如%Y表示 4 位年份、%m表示 2 位月份):
TypeScript取消自動換行復(fù)制
current_dt = datetime.now()
# 轉(zhuǎn)換為"年-月-日 時:分:秒"格式
str_dt1 = current_dt.strftime("%Y-%m-%d %H:%M:%S")
print(str_dt1) # 輸出:2025-08-30 14:40:15
# 轉(zhuǎn)換為"月/日/年 上/下午時:分"格式
str_dt2 = current_dt.strftime("%m/%d/%Y %p%I:%M")
print(str_dt2) # 輸出:08/30/2025 PM02:40
常用格式化符號:%Y(4 位年)、%m(2 位月)、%d(2 位日)、%H(24 小時制時)、%I(12 小時制時)、%M(分)、%S(秒)、%p(AM/PM)。
字符串轉(zhuǎn)對象:strptime()
需指定字符串格式,與strftime()的格式化符號對應(yīng),否則會報錯:
TypeScript取消自動換行復(fù)制
# 字符串轉(zhuǎn)datetime對象
str_dt = "2025-12-25 10:30:00"
dt_obj = datetime.strptime(str_dt, "%Y-%m-%d %H:%M:%S")
print(dt_obj) # 輸出:2025-12-25 10:30:00
print(type(dt_obj)) # 輸出:<class 'datetime.datetime'>
(三)日期時間計算:差值與偏移
借助timedelta對象實現(xiàn)日期時間的加減計算,支持天、小時、分鐘等單位的偏移。
計算日期時間差值
兩個datetime對象相減,結(jié)果為timedelta對象,包含天數(shù)、秒數(shù)等差值信息:
TypeScript取消自動換行復(fù)制
from datetime import timedelta
start_dt = datetime(2025, 8, 1, 0, 0, 0)
end_dt = datetime(2025, 8, 30, 12, 0, 0)
# 計算時間差
delta = end_dt - start_dt
print(delta) # 輸出:29 days, 12:00:00(29天12小時)
print(delta.days) # 輸出:29(天數(shù))
print(delta.total_seconds()) # 輸出:2553600.0(總秒數(shù))
日期時間偏移(加減)
datetime對象與timedelta對象相加 / 減,得到偏移后的日期時間:
TypeScript取消自動換行復(fù)制
current_dt = datetime.now()
# 3天后的同一時間
future_dt = current_dt + timedelta(days=3)
print(future_dt) # 輸出:2025-09-02 14:50:30.123456
# 1小時30分鐘前的時間
past_dt = current_dt - timedelta(hours=1, minutes=30)
print(past_dt) # 輸出:2025-08-30 13:20:30.123456
(四)日期時間屬性與常用判斷
通過datetime對象的屬性可直接獲取年、月、日等信息,也可判斷日期相關(guān)特性:
TypeScript取消自動換行復(fù)制
current_dt = datetime.now()
# 獲取日期時間屬性
print(current_dt.year) # 輸出:2025(年份)
print(current_dt.month) # 輸出:8(月份)
print(current_dt.day) # 輸出:30(日期)
print(current_dt.weekday()) # 輸出:5(星期幾,0=周一,6=周日)
# 判斷是否為閏年(date對象方法)
current_date = date.today()
print(current_date.is_leap_year) # 輸出:False(2025年非閏年)
datetime模塊通過date、time、datetime、timedelta四類對象,覆蓋了日期時間的創(chuàng)建、轉(zhuǎn)換、計算等核心需求。常用操作可總結(jié)為:用now()/ 構(gòu)造函數(shù)創(chuàng)建對象,用strftime()/strptime()實現(xiàn)格式轉(zhuǎn)換,用timedelta完成差值與偏移計算。
實際開發(fā)中,需注意格式符號的一致性(避免strptime()解析報錯)、時區(qū)問題(若需處理跨時區(qū)時間,可結(jié)合pytz第三方庫)。掌握datetime模塊的常用操作,能高效解決日志格式化、任務(wù)調(diào)度、數(shù)據(jù)時間戳處理等場景需求,是 Python 開發(fā)的必備技能。