1. 为什么我们需要datetime模块
在Python中处理时间日期数据时,新手常犯的错误就是直接使用字符串拼接或简单的time模块。我见过太多因为时区处理不当导致的生产事故,也调试过无数因闰秒引发的边界问题。datetime模块就是为解决这些痛点而生的标准库工具。
datetime模块提供了四种核心对象类型:date(日期)、time(时间)、datetime(日期时间)和timedelta(时间间隔)。这种面向对象的封装方式,让时间操作变得直观且类型安全。举个例子,计算"3天后的下午2点"这样的需求,用原生字符串操作需要处理月份进位、夏令时等复杂逻辑,而datetime只需要几行清晰的代码。
重要提示:永远不要用字符串直接存储和计算时间!时区转换、闰年判断等边界情况会让你付出惨痛代价。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. datetime核心功能深度解析
2.1 基础对象创建与转换
创建时间对象有三种主流方式。最常用的是直接构造:
python复制from datetime import datetime
now = datetime(2023, 6, 15, 14, 30) # 年月日时分
第二种是通过时间戳转换。注意这里有个坑:timestamp()返回的是UTC时间戳,而fromtimestamp()默认使用本地时区:
python复制ts = now.timestamp() # 获取时间戳
local_dt = datetime.fromtimestamp(ts) # 本地时区
utc_dt = datetime.utcfromtimestamp(ts) # UTC时区
第三种是解析字符串。strptime的性能比想象中差,在批量处理日志时建议先用正则预处理:
python复制dt = datetime.strptime("2023-06-15", "%Y-%m-%d") # 注意格式符大小写敏感
2.2 时间运算的陷阱与技巧
timedelta可以进行天、秒、微秒级别的加减,但处理月、年时要特别小心。计算"下个月今天"的正确姿势是使用第三方库dateutil的relativedelta:
python复制from dateutil.relativedelta import rel
