杰瑞科技汇

Python datetime如何转字符串?

下面我将从基础到进阶,为你详细讲解各种用法和场景。

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

核心方法:strftime()

strftime() 方法可以将 datetime 对象格式化为一个字符串,它的名字来源于 "String Format Time"。

语法:

datetime_object.strftime(format_code)
  • datetime_object: 你想要转换的 datetime 对象。
  • format_code: 一个格式字符串,由各种格式代码组成,用来定义输出字符串的样式。

常用格式代码

你需要记住一些关键的格式代码,它们就像模板中的占位符:

代码 含义 示例 (假设现在是 2025-10-27 15:30:45)
%Y 4位数的年份 2025
%y 2位数的年份 23
%m 2位数的月份 (01-12) 10
%B 月份的完整名称 October
%b 月份的缩写 Oct
%d 2位数的日 (01-31) 27
%A 星期的完整名称 Friday
%a 星期的缩写 Fri
%H 24小时制的小时 (00-23) 15
%I 12小时制的小时 (01-12) 03
%M 2位数的分钟 (00-59) 30
%S 2位数的秒 (00-59) 45
%f 6位数的微秒 (000000-999999) 123456
%p AM 或 PM PM
%j 一年中的第几天 (001-366) 300
%U 一年中的第几周 (周日为每周第一天) 43
%W 一年中的第几周 (周一为每周第一天) 43
%c 本地日期和时间的标准表示 Fri Oct 27 15:30:45 2025
%x 本地的日期表示 10/27/23
%X 本地的时间表示 15:30:45
一个普通的 字符

基础示例

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

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

转换为标准格式(ISO 8601)

ISO 8601 是一种国际通用的日期时间格式,YYYY-MM-DDTHH:MM:SS,非常适合用于日志、数据交换等。

import datetime
# 1. 创建一个 datetime 对象
now = datetime.datetime.now()
print(f"原始 datetime 对象: {now}")
# 输出: 原始 datetime 对象: 2025-10-27 15:30:45.123456
# 2. 使用 strftime 转换为 ISO 格式的字符串
iso_string = now.strftime("%Y-%m-%dT%H:%M:%S")
print(f"ISO 格式字符串: {iso_string}")
# 输出: ISO 格式字符串: 2025-10-27T15:30:45
# 如果想包含微秒
iso_string_with_microseconds = now.strftime("%Y-%m-%dT%H:%M:%S.%f")
print(f"带微秒的 ISO 字符串: {iso_string_with_microseconds}")
# 输出: 带微秒的 ISO 字符串: 2025-10-27T15:30:45.123456

转换为易读的中文格式

如果你想生成一个像“2025年10月27日 15点30分”这样的中文字符串,可以这样做:

import datetime
now = datetime.datetime.now()
# 组合不同的格式代码
chinese_string = now.strftime("%Y年%m月%d日 %H点%M分%S秒")
print(f"中文格式字符串: {chinese_string}")
# 输出: 中文格式字符串: 2025年10月27日 15点30分45秒

只获取日期部分或时间部分

import datetime
now = datetime.datetime.now()
# 只获取日期
date_string = now.strftime("%Y-%m-%d")
print(f"日期字符串: {date_string}")
# 输出: 日期字符串: 2025-10-27
# 只获取时间
time_string = now.strftime("%H:%M:%S")
print(f"时间字符串: {time_string}")
# 输出: 时间字符串: 15:30:45
# 12小时制时间,带 AM/PM
time_string_12h = now.strftime("%I:%M:%S %p")
print(f"12小时制时间字符串: {time_string_12h}")
# 输出: 12小时制时间字符串: 03:30:45 PM

常见问题与注意事项

时区问题

strftime() 本身不处理时区转换,它只是将 datetime 对象中已有的时间信息按照指定的格式进行格式化。

  • 对于无时区的 naive datetimestrftime 会直接格式化其表示的本地时间。
  • 对于有时区的 aware datetimestrftime 会格式化其 UTC 时间(如果时区设置为 UTC)或该时区对应的时间。
import datetime
# 1. 无时区的 datetime
naive_dt = datetime.datetime(2025, 10, 27, 12, 0, 0)
print(f"无时区对象: {naive_dt.strftime('%Y-%m-%d %H:%M:%S %Z')}")
# 输出: 无时区对象: 2025-10-27 12:00:00 
# 2. 有时区的 datetime (UTC)
utc_dt = datetime.datetime(2025, 10, 27, 12, 0, 0, tzinfo=datetime.timezone.utc)
print(f"UTC时区对象: {utc_dt.strftime('%Y-%m-%d %H:%M:%S %Z')}")
# 输出: UTC时区对象: 2025-10-27 12:00:00 UTC
# 3. 有时区的 datetime (东八区)
tz = datetime.timezone(datetime.timedelta(hours=8)) # 创建东八区时区对象
east8_dt = datetime.datetime(2025, 10, 27, 12, 0, 0, tzinfo=tz)
print(f"东八区对象: {east8_dt.strftime('%Y-%m-%d %H:%M:%S %Z')}")
# 输出: 东八区对象: 2025-10-27 12:00:00 +0800

注意:%Z 会输出时区名称或缩写,对于自定义时区偏移(如 +0800),通常需要手动组合 %z

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

ValueError: Invalid format string

如果你在 format_code 中写错了格式代码(比如把 %Y 写成了 %y 而你又想要4位数年份),程序不会报错,只会输出不符合预期的结果,但如果你使用了完全无效的代码(%k),Python 会抛出 ValueError

import datetime
now = datetime.datetime.now()
# 正确用法
print(now.strftime("%Y-%m-%d")) # 输出: 2025-10-27
# 错误用法 - 会引发 ValueError
try:
    print(now.strftime("%k-%m-%d")) 
except ValueError as e:
    print(f"错误: {e}")
# 输出: 错: Invalid format string

反向操作:字符串转 datetime

如果你有一个符合某种格式的日期时间字符串,想把它变回 datetime 对象,可以使用 datetime.strptime() 方法("String Parse Time")。

import datetime
# 字符串
date_string = "2025-10-27 15:30:45"
# 定义格式
format_code = "%Y-%m-%d %H:%M:%S"
# 使用 strptime 进行转换
dt_object = datetime.datetime.strptime(date_string, format_code)
print(f"转换后的 datetime 对象: {dt_object}")
print(f"对象的类型: {type(dt_object)}")
# 输出:
# 转换后的 datetime 对象: 2025-10-27 15:30:45
# 对象的类型: <class 'datetime.datetime'>
操作 方法 描述
datetimestr datetime_obj.strftime(format_code) datetime 对象格式化为字符串,非常灵活。
strdatetime datetime.datetime.strptime(str, format_code) 将特定格式的字符串解析为 datetime 对象。
datetime → ISO str datetime_obj.isoformat() 一个便捷方法,用于生成标准的 ISO 8601 格式字符串。

strftime 的核心是格式化,而 strptime 的核心是解析,掌握常用的格式代码,你就能应对绝大多数日期时间字符串转换的需求。

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