Python datetime模块详解:日期时间处理、格式化与转换实战

顾言
顾言
发布时间:2026-10-12| 4人浏览过
原创

本文系统梳理Python标准库datetime模块的核心类与操作方法。通过实际代码演示date、time与datetime对象的创建、时间间隔计算(timedelta)、strftime格式化处理以及字符串与时间戳的双向转换流程,帮助开发者高效掌握Python中的日期时间处理技巧。

datetime模块核心组件与基础概念

Python内置的datetime模块提供了直观且易用的日期时间处理接口。该模块主要包含以下几个核心类,所有对象默认均为不可变(immutable)类型:

  • date:表示日期,属性包含年、月、日。
  • time:表示时间,属性包含时、分、秒、微秒及时区信息。
  • datetime:结合日期与时间的综合类。
  • timedelta:表示两个时间点之间的时间间隔。
  • tzinfo:抽象基类,用于封装时区相关逻辑。

核心类的初始化与实例操作

第1步:构建日期与时间对象

目的:明确参数范围,创建指定时刻的date、time或datetime对象。

入口与动作:直接调用构造函数,传入对应的整型参数。需注意date的月份从1开始,time的取值范围为hour[0,24)、minute/second[0,60)、microsecond[0,1000000)。

from datetime import date, time, datetime

# 构建日期对象 (年, 月, 日)
d = date(2024, 5, 15)

# 构建时间对象 (时, 分, 秒, 微秒)
t = time(14, 30, 45, 120000)

# 构建完整的日期时间对象
dt = datetime(2024, 5, 15, 14, 30, 45)

print(f"Date: {d}")       # 输出: Date: 2024-05-15
print(f"Time: {t}")       # 输出: Time: 14:30:45.120000
print(f"Datetime: {dt}")  # 输出: Datetime: 2024-05-15 14:30:45

第2步:获取当前时间与计算时间间隔

目的:快速捕获系统时钟,并进行加减运算或差异对比。

入口与动作:使用datetime.now()或date.today()获取当前值;利用timedelta进行偏移;通过相减或比较符验证状态。

import datetime

# 获取当前本地时间
now = datetime.datetime.now()
# 计算三天前的日期
past = now - datetime.timedelta(days=3)
# 计算未来一周的时间
future = now + datetime.timedelta(weeks=1)

print(f"当前时间: {now.strftime('%Y-%m-%d %H:%M:%S')}")
print(f"三天前:   {past.date()}")
print(f"是否超过7天: {future > now}")  # 输出: True

第3步:执行对象替换与维度查询

目的:在不修改原对象的前提下,派生出修改后的新对象,并提取关键时间维度。

入口与动作:调用.replace()覆盖指定字段;使用.weekday()(周一为0)或.isoweekday()(周一为1)查询星期;通过.isoformat()获取标准字符串。

original = datetime.datetime(2023, 12, 25)
# 将年份替换为2024,原对象保持不变
modified = original.replace(year=2024)

print(f"原始: {original.isoformat()} (ISO周几: {original.isoweekday()})")
print(f"修改: {modified.isoformat()} (ISO周几: {modified.isoweekday()})")
# 完成状态:控制台打印显示年份变更且类型一致,无副作用

字符串格式化与时区处理

实际业务中常需将时间对象转换为特定格式的字符串,或反向解析。strftime负责格式化输出,strptime负责字符串解析。

第4步:定义格式化规则并完成双向转换

目的:统一日志、数据库或API交互中的时间显示与录入格式。

入口与动作:在.strftime()中传入格式指令,如%Y(四位年份)、%m(两位月份)、%d(日)、%H:%M:%S等。解析时使用datetime.strptime(字符串, 格式串)。

dt = datetime.datetime.now()
# 常用格式组合
fmt_custom = "%Y年%m月%d日 %H:%M:%S"
formatted_str = dt.strftime(fmt_custom)
parsed_dt = datetime.datetime.strptime("2024年05月15日 14:30:00", fmt_custom)

print(f"格式化后: {formatted_str}")
print(f"解析回对象: {parsed_dt}")

完整格式码参考:%a/%A(星期简写/全写),%b/%B(月份简写/全写),%w(星期数字,0为周日),%U/%W(全年周数),%j(年内第几天)。遇到特殊字符需使用双百分号%%转义。

时间戳与Datetime的双向流转

后端开发与跨语言交互常依赖Unix时间戳。需结合内置time模块完成桥接。

第5步:实现Datetime、字符串与时间戳互换

目的:打通面向用户的字符串显示、底层存储的时间戳以及面向逻辑处理的datetime对象。

入口与动作:利用.timetuple()配合time.mktime()转为时间戳;使用time.localtime()配合time.strftime()还原为字符串。

import time
from datetime import datetime

dt_obj = datetime.now()
# datetime -> 时间戳 (Unix Timestamp)
timestamp = time.mktime(dt_obj.timetuple())

# 时间戳 -> 字符串
str_time = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(timestamp))

# 字符串 -> datetime
back_to_dt = datetime.strptime(str_time, "%Y-%m-%d %H:%M:%S")

print(f"原始对象: {dt_obj}")
print(f"时间戳值: {timestamp:.0f}")
print(f"还原字符串: {str_time}")
print(f"解析对象匹配: {dt_obj == back_to_dt}")

避坑指南与总结

在使用datetime模块时需注意以下几点:第一,date和time的范围有严格限制(年份1~9999,自动校验闰年天数),超界或非法输入会抛出ValueError;第二,.replace()不会修改原对象,而是返回副本,符合不可变设计原则;第三,默认创建的datetime对象为“naive”(无时区)类型,跨地域服务或定时任务务必显式绑定zoneinfo模块或第三方库处理时区,避免夏令时与跨时区计算偏差。

以上就是Python datetime模块详解的详细内容,更多关于Python基础语法与标准库的资料请关注本站其它相关文章!

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。