在 Python 開發(fā)中,日期時(shí)間處理是高頻需求,無論是日志記錄、數(shù)據(jù)統(tǒng)計(jì),還是定時(shí)任務(wù),都需精準(zhǔn)操作日期時(shí)間。Python 標(biāo)準(zhǔn)庫中的datetime模塊提供了完整的日期時(shí)間處理工具,支持日期創(chuàng)建、格式轉(zhuǎn)換、差值計(jì)算等核心功能,無需依賴第三方庫即可滿足多數(shù)場景需求。小編將拆解datetime模塊的核心組件,詳解常用操作,助你高效處理日期時(shí)間。
一、datetime 模塊核心組件:四類核心對(duì)象
datetime模塊通過四個(gè)核心對(duì)象封裝日期時(shí)間信息,各對(duì)象職責(zé)明確,覆蓋不同處理場景:
datetime.date:僅處理日期(年、月、日),如 2025-08-30;
datetime.time:僅處理時(shí)間(時(shí)、分、秒、微秒),如 14:30:45.123456;
datetime.datetime:同時(shí)處理日期與時(shí)間,如 2025-08-30 14:30:45,最常用;
datetime.timedelta:表示時(shí)間間隔(如 2 天、3 小時(shí)),用于日期時(shí)間差值計(jì)算。

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