datetime模块的核心类包括:①date(仅年月日)、②time(仅时分秒微秒)、③datetime(日期+时间)、④timedelta(时间差)、⑤tzinfo(时区抽象基类,实际多用zoneinfo或pytz)。

Python 中处理日期和时间最常用、最核心的模块就是 datetime。它不依赖外部库,标准库自带,功能完整且设计清晰,适合绝大多数日常需求——比如记录日志时间、计算两个时间点的间隔、格式化输出、解析用户输入的时间字符串等。
datetime 模块的核心类有哪些?
这个模块不是只有一个类,而是由几个分工明确的类组成,理解它们的关系是用好 datetime 的第一步:
- date:只表示年-月-日,不带时分秒,也不含时区,适合记录生日、合同生效日这类纯日期信息
- time:只表示时:分:秒.微秒,不带日期,也不含时区,适合表示一天中的某个时刻(如闹钟设定)
- datetime:date + time 的组合,包含年月日时分秒微秒,是最常用的类,比如记录某次请求的精确时间戳
- timedelta:表示两个时间点之间的差值(如“3天”、“2小时30分钟”),用于加减运算,不能单独表示某个时刻
-
tzinfo(抽象基类):用于支持时区,实际中多用
zoneinfo(Python 3.9+)或第三方库pytz配合使用
怎么创建和获取当前时间?
最常见操作就是拿到“现在”:
-
datetime.now()→ 返回本地时区的当前 datetime 对象 -
datetime.utcnow()→ 返回 UTC 时间(不推荐直接用,容易忽略时区问题) -
date.today()→ 只取今天日期,返回 date 对象 - 手动构造:
datetime(2024, 5, 20, 13, 14, 30)表示 2024 年 5 月 20 日 13:14:30
注意:now() 和 today() 默认不带时区信息(tzinfo=None),属于“naive”类型;如果需要带时区的“aware”对象,得显式传入时区,例如:datetime.now(ZoneInfo("Asia/Shanghai"))(需先 from zoneinfo import ZoneInfo)。
立即学习“Python免费学习笔记(深入)”;
怎么格式化输出和解析字符串?
和字符串互转是高频需求,靠 strftime 和 strptime 两个方法:
-
dt.strftime("%Y-%m-%d %H:%M:%S")→ 把 datetime 对象转成指定格式字符串,比如"2024-05-20 13:14:30" -
datetime.strptime("2024-05-20", "%Y-%m-%d")→ 把字符串按格式解析成 datetime 对象(注意:没有时间部分时,时分秒默认为 0)
常用格式码记住这几个就够用:%Y(4位年)、%m(月)、%d(日)、%H(24小时制时)、%M(分)、%S(秒)、%f(微秒)。大小写敏感,别写错。
怎么计算时间差和做加减法?
datetime 对象之间可以相减,结果是 timedelta;datetime 也可以和 timedelta 相加减,得到新的 datetime:
-
later = dt + timedelta(days=7, hours=3)→ 往后推 7 天 3 小时 -
diff = dt2 - dt1→ 得到一个 timedelta 对象,可用diff.days、diff.seconds、diff.total_seconds()获取数值 - 注意:
timedelta不能和date或time直接运算,类型要匹配
比如判断某订单是否超时:用当前时间减去下单时间,再和预设的 timedelta(hours=24) 比较大小即可。
掌握这四块内容,基本覆盖了 90% 的 Python 时间处理场景。不需要死记所有方法,先从 datetime.now()、strftime、strptime 和 timedelta 加减练起,边用边熟悉。










