
datetime模块是Python处理日期和时间最常用、最核心的标准库之一,它提供了对日期、时间、时间间隔的精确表示与灵活操作能力。掌握它,能高效完成日志时间戳生成、时间差计算、定时任务调度、数据按天聚合等实际需求。
datetime模块的核心类及其用途
datetime模块主要包含5个常用类,各司其职:
- date:仅表示年-月-日,不带时分秒,适合记录生日、节假日等纯日期信息;
- time:仅表示时:分:秒.微秒,不关联日期,适用于定时提醒、时段标记;
-
datetime:date + time 的组合,最常用,完整描述某个具体时刻(如
2024-06-15 14:30:45.123456); - timedelta:表示两个datetime之间的时间差(如“3天”“2小时30分钟”),支持加减运算;
-
tzinfo(抽象基类):用于处理时区,配合
timezone(子类)实现UTC偏移,如timezone(timedelta(hours=8))代表东八区。
创建与格式化datetime对象
创建方式多样,推荐根据场景选择:
- 用
datetime.now()获取本地当前时间;用datetime.utcnow()获取UTC当前时间; - 用
datetime(2024, 6, 15, 14, 30)手动构造指定时刻; - 用
strptime()从字符串解析时间,例如:dt = datetime.strptime("2024-06-15 14:30", "%Y-%m-%d %H:%M"); - 用
strftime()将datetime转为可读字符串,例如:dt.strftime("%Y年%m月%d日 %H:%M") → "2024年06月15日 14:30"; - 注意:
%y是两位年份(24),%Y是四位(2024);%I是12小时制,%H是24小时制。
时间运算与比较
datetime对象支持直接比较和算术运算,关键点如下:
立即学习“Python免费学习笔记(深入)”;
- 同类型对象可直接用
>、==等比较,结果符合自然时间顺序; - datetime减去datetime → 返回
timedelta对象;
例如:dt2 - dt1得到两者间隔; - datetime加/减
timedelta→ 返回新的datetime;
例如:dt + timedelta(days=7, hours=3)得到一周零三小时后的时间; - timedelta本身支持乘除(只限整数),如
timedelta(hours=2) * 3 → 6小时; - 避免混用“有无时区”的datetime对象——带时区的不能直接与本地时间相减,会报
TypeError。
时区处理实用技巧
默认datetime对象是“naive”(无时区),需显式添加时区才具备时区感知能力:
- 使用
timezone.utc或timezone(timedelta(hours=8))创建固定偏移时区; - 给naive datetime添加时区:
dt.replace(tzinfo=timezone.utc); - 更安全的做法是用
astimezone()转换时区:dt_utc = dt_local.astimezone(timezone.utc); - 真实项目中建议用
zoneinfo模块(Python 3.9+)替代硬编码偏移,支持夏令时与历史规则,例如:from zoneinfo import ZoneInfodt.astimezone(ZoneInfo("Asia/Shanghai"))。










