杰瑞科技汇

Python datetime 如何转字符串?

核心方法:strftime()

strftime() 方法是 datetime 对象的一个内置方法,它的全称是 "string format time"(字符串格式化时间),它可以将一个 datetime 对象根据指定的格式代码,格式化为一个字符串。

Python datetime 如何转字符串?-图1
(图片来源网络,侵删)

语法:

datetime_object.strftime(format_code)
  • datetime_object: 一个 datetime 对象。
  • format_code: 一个字符串,包含了格式说明符,用来定义输出的格式。

常用格式代码

这是最关键的部分,你需要了解这些代码的含义才能自由组合出你想要的格式。

格式代码 含义 示例 (输出)
%Y 4位数的年份 2025
%y 2位数的年份 23
%m 2位数的月份 (01-12) 09
%B 月份的全称 September
%b 月份的缩写 Sep
%d 2位数的日 (01-31) 15
%A 星期几的全称 Friday
%a 星期几的缩写 Fri
%H 24小时制的小时数 (00-23) 14
%I 12小时制的小时数 (01-12) 02
%M 分钟数 (00-59) 30
%S 秒数 (00-59) 05
%f 微秒 (000000-999999) 123456
%p AM 或 PM PM
%j 一年中的第几天 (001-366) 258
%U 一年中的第几周(周日为每周第一天) (00-53) 37
%W 一年中的第几周(周一为每周第一天) (00-53) 37
%c 本地化的日期和时间表示 Fri Sep 15 14:30:05 2025
%x 本地化的日期表示 09/15/23
%X 本地化的时间表示 14:30:05
一个字面的 '%' 字符

基础示例

让我们从最常用的几个例子开始。

获取标准的 YYYY-MM-DD HH:MM:SS 格式

这是数据库和日志文件中最常见的格式。

Python datetime 如何转字符串?-图2
(图片来源网络,侵删)
from datetime import datetime
# 1. 创建一个 datetime 对象
now = datetime.now()
# 2. 使用 strftime 进行格式化
formatted_string = now.strftime("%Y-%m-%d %H:%M:%S")
print(f"原始 datetime 对象: {now}")
print(f"格式化后的字符串: {formatted_string}")
# 输出示例 (执行时间不同,结果会变):
# 原始 datetime 对象: 2025-09-15 14:30:05.123456
# 格式化后的字符串: 2025-09-15 14:30:05

获取 YYYY/MM/DD 格式

from datetime import datetime
now = datetime.now()
formatted_string = now.strftime("%Y/%m/%d")
print(formatted_string)
# 输出示例: 2025/09/15

获取 YYYY年MM月DD日 HH时MM分SS秒 格式

中文环境下的常见写法。

from datetime import datetime
now = datetime.now()
formatted_string = now.strftime("%Y年%m月%d日 %H时%M分%S秒")
print(formatted_string)
# 输出示例: 2025年09月15日 14时30分05秒

获取带星期的格式

from datetime import datetime
now = datetime.now()
# 星期几, 月份 日, 年
formatted_string = now.strftime("%A, %B %d, %Y")
print(formatted_string)
# 输出示例: Friday, September 15, 2025

获取 12 小时制带 AM/PM 的格式

from datetime import datetime
now = datetime.now()
# 12小时制: 时:分:秒 AM/PM
formatted_string = now.strftime("%I:%M:%S %p")
print(formatted_string)
# 输出示例: 02:30:05 PM

高级和实用示例

处理时区

如果你的 datetime 对象是时区感知的(timezone-aware),strftime 也能正确处理。

from datetime import datetime, timezone, timedelta
# 创建一个时区感知的 datetime 对象 (UTC+8)
tz = timezone(timedelta(hours=8)) # 东八区
now_aware = datetime.now(tz)
# 格式化时区信息
# %z 时区偏移量 (格式 +HHMM 或 -HHMM)
formatted_string = now_aware.strftime("%Y-%m-%d %H:%M:%S %z")
print(formatted_string)
# 输出示例: 2025-09-15 22:30:05 +0800

处理微秒

如果需要高精度时间,可以使用 %f

from datetime import datetime
now = datetime.now()
formatted_string = now.strftime("%Y-%m-%d %H:%M:%S.%f")
print(formatted_string)
# 输出示例: 2025-09-15 14:30:05.123456

常见错误与注意事项

ValueError: Invalid format string

这个错误通常发生在你使用了不存在的格式代码,或者大小写写错了。

Python datetime 如何转字符串?-图3
(图片来源网络,侵删)
# 错误示例
from datetime import datetime
now = datetime.now()
# %Y 是正确的,但 %y 是小写,表示两位年份
# %M 是分钟,%m 是月份,大小写很重要
try:
    now.strftime("%Y-%m-%d %H:%M:%S %Y") # 多了一个 %Y 会导致问题
except ValueError as e:
    print(f"错误: {e}")
# 正确的写法
# now.strftime("%Y-%m-%d %H:%M:%S")

AttributeError: 'str' object has no attribute 'strftime'

这个错误非常常见,意味着你试图对一个字符串调用 strftime 方法,请确保你操作的是一个 datetime 对象。

from datetime import datetime
# 错误示例
my_date_string = "2025-09-15"
try:
    my_date_string.strftime("%Y-%m-%d") # my_date_string 是 str, 不是 datetime
except AttributeError as e:
    print(f"错误: {e}")
# 正确的做法是先转换
# my_date_object = datetime.strptime(my_date_string, "%Y-%m-%d")
# my_date_object.strftime(...) # 这样才是对的

反向操作:字符串转 datetime

strftime 相对的是 strptime(string parse time),它可以将一个符合特定格式的字符串解析回 datetime 对象。

from datetime import datetime
date_string = "2025-09-15 14:30:05"
# 使用 strptime 将字符串转换为 datetime 对象
# 第一个参数是字符串,第二个参数是字符串的格式
date_object = datetime.strptime(date_string, "%Y-%m-%d %H:%M:%S")
print(f"原始字符串: {date_string}")
print(f"转换后的 datetime 对象: {date_object}")
print(f"对象的类型: {type(date_object)}")
# 输出:
# 原始字符串: 2025-09-15 14:30:05
# 转换后的 datetime 对象: 2025-09-15 14:30:05
# 对象的类型: <class 'datetime.datetime'>
任务 方法 示例
datetime → 字符串 strftime() dt.strftime("%Y-%m-%d")
字符串 → datetime strptime() datetime.strptime("2025-09-15", "%Y-%m-%d")

strftime 的核心是格式化,而 strptime 的核心是解析,熟练掌握格式代码 %Y, %m, %d, %H, %M, %S 是解决绝大多数时间格式化问题的关键。

分享:
扫描分享到社交APP
上一篇
下一篇