datetime模块专用于时区和日期时间结构化操作,time模块仅适用于时间戳获取与程序计时。

datetime 模块适合处理带时区、日期+时间的结构化操作
当你需要表示“2024-06-15 14:30:00”这种具体时刻,或做日期加减、格式化、解析字符串(如 "2024-06-15T14:30:00"),datetime 是唯一合理选择。它提供 datetime、date、time、timedelta 等类,天然支持年月日时分秒+微秒+时区。
常见错误是误用 time.struct_time 去替代 datetime 对象——后者可直接调用 .strftime()、.replace()、+ timedelta(hours=2),前者连加法都不支持。
-
datetime.strptime("2024-06-15", "%Y-%m-%d")能直接转成对象;而time.strptime()返回的是不可变元组,得再手动拼datetime - 时区处理必须用
datetime:标准库zoneinfo.ZoneInfo只能传给datetime.now(tz=...)或.astimezone() - 数据库 ORM(如 SQLAlchemy)和 JSON 序列化库(如
pydantic)默认识别datetime类型,不认time.struct_time
time 模块只该用于获取/控制 Unix 时间戳和程序执行时间
time 模块的核心价值就两个:time.time()(秒级浮点时间戳)、time.perf_counter()(高精度计时)。它不是用来“表示日期”的——那属于设计误用。
典型踩坑:用 time.localtime() 得到 struct_time 后,试图用它计算“三天后是几号”,结果要手动拆年月日、考虑闰年、月份天数……完全绕开 datetime 的优势。
立即学习“Python免费学习笔记(深入)”;
NITC效益型企业网站系统(PHP)产品特色1、企业网站模块:1)网站设计精美:前台页面全部采用DIV+CSS,设计严谨,布局合理,页面精美大气。2)管理操作方便:后台管理界面友好,简单易用,区别于一般CMS系统的复杂与繁琐,功能强大,系统安全,性能稳定。用户使用全自动化控制,功能模块可扩展性强。2、搜索引擎优化: 经众多网络营销专家制定,系统自带搜索引擎基础优化功能,能在最短的时间内提升网站的曝
-
time.time()返回float,适合存日志时间戳、做缓存过期判断(if now - cache_time > 300:) -
time.sleep(0.1)是唯一可靠跨平台休眠方式;datetime没有休眠能力 -
time.perf_counter()比time.time()更准,测函数耗时必须用它,不受系统时钟调整影响
time.gmtime() 和 time.localtime() 返回值不能直接参与日期运算
这两个函数返回 time.struct_time,本质是命名元组(tm_year, tm_mon, …),不可变、不支持算术、没有时区信息(localtime 甚至隐含本地时区偏移但不暴露)。
你看到别人用 time.strftime("%Y", time.gmtime()),只是取格式化字符串——一旦需要“下个月第一天”,立刻卡住。
- 别对
struct_time做+或+=:会报TypeError: unsupported operand type(s) - 从
struct_time转datetime必须经过time.mktime()或calendar.timegm()再转,多此一举 -
time.asctime()输出固定格式字符串,无法定制,也不如datetime.strftime()灵活
Python 3.12+ 的 zoneinfo 让 datetime 时区操作不再依赖第三方库
过去用 pytz 是因为 datetime 自带的 timezone.utc 只支持固定偏移(如 UTC+8),没法处理夏令时切换。现在 zoneinfo 成了标准库,datetime 终于能真正落地时区场景。
关键点:所有时区操作必须基于 datetime 对象,time 模块全程无参与。
- 正确写法:
dt = datetime.now(ZoneInfo("Asia/Shanghai")),不是time.tzset()(那只是改 C 运行时环境,Python 层不感知) -
dt.astimezone(ZoneInfo("UTC"))自动处理夏令时;time.localtime()完全做不到这点 - 时区字符串必须来自
zoneinfo.available_timezones(),硬写"CST"或"GMT+8"会报ZoneInfoNotFoundError
真正容易被忽略的是:哪怕只做本地时间加减,也该用 datetime + timedelta;time 模块只管“现在是多少秒”和“让我停一会儿”。混用两者边界,八成会在某次跨月或夏令时切换时出错。









