在 Python 开发中,日期时间处理是高频需求,无论是日志记录、数据统计,还是定时任务,都需精准操作日期时间。Python 标准库中的datetime模块提供了完整的日期时间处理工具,支持日期创建、格式转换、差值计算等核心功能,无需依赖第三方库即可满足多数场景需求。小编将拆解datetime模块的核心组件,详解常用操作,助你高效处理日期时间。
一、datetime 模块核心组件:四类核心对象
datetime模块通过四个核心对象封装日期时间信息,各对象职责明确,覆盖不同处理场景:
datetime.date:仅处理日期(年、月、日),如 2025-08-30;
datetime.time:仅处理时间(时、分、秒、微秒),如 14:30:45.123456;
datetime.datetime:同时处理日期与时间,如 2025-08-30 14:30:45,最常用;
datetime.timedelta:表示时间间隔(如 2 天、3 小时),用于日期时间差值计算。
二、datetime 模块常用操作:从创建到应用
(一)创建日期时间对象:获取当前或指定日期时间
获取当前日期时间
通过datetime.now()获取当前本地日期时间,datetime.utcnow()获取当前 UTC 时间(国际标准时间):
TypeScript取消自动换行复制
from datetime import datetime, date, time
# 获取当前本地日期时间(datetime对象)
current_dt = datetime.now()
print(current_dt) # 输出:2025-08-30 14:35:22.123456
# 获取当前日期(date对象)
current_date = date.today()
print(current_date) # 输出:2025-08-30
# 获取当前时间(time对象)
current_time = datetime.now().time()
print(current_time) # 输出:14:35:22.123456
创建指定日期时间
直接通过对象构造函数传入参数,需注意参数合法性(如月份 1-12、日期 1-31):
TypeScript取消自动换行复制
# 创建指定日期时间(2025年10月1日 8:00:00)
specified_dt = datetime(2025, 10, 1, 8, 0, 0)
print(specified_dt) # 输出:2025-10-01 08:00:00
# 创建指定日期(2025年5月20日)
specified_date = date(2025, 5, 20)
print(specified_date) # 输出:2025-05-20
(二)日期时间格式转换:在字符串与对象间切换
日期时间对象需转换为字符串才能用于输出或存储,字符串也需解析为对象才能进行计算,核心依赖strftime()(对象转字符串)与strptime()(字符串转对象)。
对象转字符串:strftime()
通过格式化符号指定输出格式(如%Y表示 4 位年份、%m表示 2 位月份):
TypeScript取消自动换行复制
current_dt = datetime.now()
# 转换为"年-月-日 时:分:秒"格式
str_dt1 = current_dt.strftime("%Y-%m-%d %H:%M:%S")
print(str_dt1) # 输出:2025-08-30 14:40:15
# 转换为"月/日/年 上/下午时:分"格式
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)。
字符串转对象:strptime()
需指定字符串格式,与strftime()的格式化符号对应,否则会报错:
TypeScript取消自动换行复制
# 字符串转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对象实现日期时间的加减计算,支持天、小时、分钟等单位的偏移。
计算日期时间差值
两个datetime对象相减,结果为timedelta对象,包含天数、秒数等差值信息:
TypeScript取消自动换行复制
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(天数)
print(delta.total_seconds()) # 输出:2553600.0(总秒数)
日期时间偏移(加减)
datetime对象与timedelta对象相加 / 减,得到偏移后的日期时间:
TypeScript取消自动换行复制
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对象的属性可直接获取年、月、日等信息,也可判断日期相关特性:
TypeScript取消自动换行复制
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四类对象,覆盖了日期时间的创建、转换、计算等核心需求。常用操作可总结为:用now()/ 构造函数创建对象,用strftime()/strptime()实现格式转换,用timedelta完成差值与偏移计算。
实际开发中,需注意格式符号的一致性(避免strptime()解析报错)、时区问题(若需处理跨时区时间,可结合pytz第三方库)。掌握datetime模块的常用操作,能高效解决日志格式化、任务调度、数据时间戳处理等场景需求,是 Python 开发的必备技能。