Python datetime对象与字符串怎么互转

追风的人
追风的人
发布时间:2026-10-24| 6人浏览过
原创

在Python开发中,datetime对象与字符串的相互转换主要依赖标准库的 datetime 模块:通过 strftime() 将结构化时间格式化为可读字符串(Format),通过 strptime() 将外部文本解析为日期时间对象(Parse)。本文将从双向转换的执行路径、格式符映射、标准ISO解析及实战陷阱四个维度进行完整梳理。

Python datetime对象与字符串怎么互转
图1:datetime对象与字符串双向转换机制总览

一、datetime对象转字符串:使用 strftime()

当我们需要将时间写入日志文件、返回给前端API接口或保存到文本数据库时,必须将内存中的 datetime 对象转换为标准格式的字符串。调用的方法是对象的实例方法 strftime()(这里的字母 f 代表 Format,即格式化)。

1. 基本使用示例

以下示例展示了获取当前时间并将其格式化为常见日期时间格式的过程:

from datetime import datetime

# 获取当前时间(datetime对象)
now = datetime.now()
print("原始对象:", type(now), now)

# 1. 转换为最常用的年月日 时分秒格式
str_standard = now.strftime("%Y-%m-%d %H:%M:%S")
print("标准格式化字符串:", str_standard)

# 2. 转换为带中文标签的格式
str_custom = now.strftime("%Y年%m月%d日 %H时%M分")
print("中文日期字符串:", str_custom)

# 3. 仅保留日期
str_date = now.strftime("%Y/%m/%d")
print("斜杠分隔日期:", str_date)

示例输出:
原始对象: <class 'datetime.datetime'> 2026-10-23 08:30:15.123456
标准格式化字符串: 2026-10-23 08:30:15
中文日期字符串: 2026年10月23日 08时30分
斜杠分隔日期: 2026/10/23

Python datetime对象与字符串怎么互转
图2:使用 strptime() 解析时间字符串的操作步骤

二、字符串转datetime对象:使用 strptime()

当程序从文件读取记录、获取用户表单提交或解析网络爬虫数据时,时间通常是以文本形式存在的。此时需要调用 datetime.strptime() 类方法(字母 p 代表 Parse,即语法解析)。

1. 基本使用示例

调用 strptime(date_string, format) 时,第二个参数必须精确匹配第一个参数的排列规则:

from datetime import datetime

# 原始时间字符串
raw_str = "2026-10-23 15:45:30"
date_format = "%Y-%m-%d %H:%M:%S"

# 将字符串解析为datetime对象
dt_obj = datetime.strptime(raw_str, date_format)

print("解析结果:", dt_obj)
print("类型验证:", type(dt_obj))
print(f"年份: {dt_obj.year}, 月份: {dt_obj.month}, 小时: {dt_obj.hour}")

示例输出:
解析结果: 2026-10-23 15:45:30
类型验证: <class 'datetime.datetime'>
年份: 2026, 月份: 10, 小时: 15

2. 常见格式符快速对照表

不管是 strftime 还是 strptime,格式占位符都遵循相同的规则。最常用的格式占位符如下:

占位符 含义 有效取值范围 / 示例
%Y 四位数完整年份 2024, 2026
%y 两位数年份(无世纪) 24, 26
%m 十进制两位月份(前导零) 01 - 12
%d 十进制两位日期(前导零) 01 - 31
%H 24小时制小时(前导零) 00 - 23
%I 12小时制小时(前导零) 01 - 12
%M 分钟(前导零) 00 - 59
%S 秒数(前导零) 00 - 59
%f 微秒(6位十进制数) 000000 - 999999
%z UTC偏移量 +0800, -0500
Python datetime对象与字符串怎么互转
图3:传统格式化函数与现代 ISO 8601 方法的选型对比

三、进阶:ISO 8601标准格式的便捷转换

在现代Web开发和前后端数据交互中,ISO 8601格式(如 2026-10-23T08:30:00+08:00)已成为事实上的工业标准。为了简化格式编写,Python 3.7+ 提供了更加高效直观的方法:

1. datetime 转 ISO 字符串:isoformat()

from datetime import datetime, timezone, timedelta

# 构建一个带有时区信息的对象(东八区)
tz_bj = timezone(timedelta(hours=8))
dt = datetime(2026, 10, 23, 8, 30, 0, tzinfo=tz_bj)

# 直接调用 isoformat()
iso_str = dt.isoformat()
print("ISO 8601 字符串:", iso_str)

输出: 2026-10-23T08:30:00+08:00

2. ISO 字符串转 datetime:fromisoformat()

不需要显式拼写 "%Y-%m-%dT%H:%M:%S%z",直接调用 fromisoformat() 即可快速解析符合ISO标准的字符串:

from datetime import datetime

raw_iso = "2026-10-23T08:30:00+08:00"
parsed_dt = datetime.fromisoformat(raw_iso)

print("解析出的对象:", parsed_dt)
print("时区偏移量:", parsed_dt.tzinfo)

四、容易出现的错误与排查注意点

在进行日期与字符串转换时,初学者常常因为以下细节导致程序抛出异常:

  • ValueError: time data does not match format:这是最常见的错误。原因是字符串的内容、分隔符或空格与格式模板不完全一致。例如文本中带有秒而格式串中漏掉了 :%S,或者月份使用了非补零格式。
  • 大小写占位符混淆:例如 %m 表示月份(01-12),而 %M 表示分钟(00-59);%H 表示24小时制,而 %I 表示12小时制。
  • 天真时间(Naive)与感知时间(Aware):直接使用 datetime.now() 得到的是没有时区信息的 Naive 时间,转换为带时区的字符串(如 %z)会输出空字符串;处理跨时区业务时,建议显式附加 timezone。
Python datetime对象与字符串怎么互转
图4:Python datetime 与字符串互转核心要点总结
相关标签:

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

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 算法库。