杰瑞科技汇

Python 如何格式化 datetime?

核心概念

Python 的 datetime 模块处理日期和时间时,有两种主要的表示形式:

Python 如何格式化 datetime?-图1
(图片来源网络,侵删)
  1. datetime 对象:这是一个 Python 的对象,包含了年、月、日、时、分、秒、微秒等信息,你可以对这个对象进行计算(比如加一天、减一小时等)。
  2. 字符串:这是一个人类可读的文本"2025-10-27 15:30:00",字符串不能直接用于日期计算。

我们经常需要在 datetime 对象和字符串之间进行转换:

  • strftime():将 datetime 对象格式化成字符串。
    • str format time -> 字符串 格式化 时间
  • strptime():将字符串解析datetime 对象。
    • str parse time -> 字符串 解析 时间

strftime():将 datetime 对象转为字符串

当你想把一个 datetime 对象显示给用户,或者以特定格式存储到文本文件或数据库时,就需要使用 strftime()

语法

datetime_object.strftime(format_code)

关键:格式化代码

格式化代码是以百分号 开头的特殊字符,代表日期或时间的某个部分。

代码 含义 示例
%Y 四位数的年份 2025
%y 两位数的年份 23
%m 两位数的月份 (01-12) 10
%B 月份的全称 October
%b 月份的缩写 Oct
%d 两位数的日 (01-31) 27
%A 星期几的全称 Friday
%a 星期几的缩写 Fri
%H 24小时制的小时 (00-23) 15
%I 12小时制的小时 (01-12) 03
%M 两位数的分钟 (00-59) 30
%S 两位数的秒 (00-59) 05
%f 微秒 (6位数字) 123456
%p AM 或 PM PM
%j 一年中的第几天 (001-366) 300
%U 一年中的第几周(周日为一周的开始)(00-53) 43
%W 一年中的第几周(周一为一周的开始)(00-53) 43
%c 本地化的日期和时间表示 Fri Oct 27 15:30:00 2025
%x 本地化的日期表示 10/27/23
%X 本地化的时间表示 15:30:00
一个普通的百分号字符

示例

from datetime import datetime
# 1. 创建一个 datetime 对象
now = datetime.now()
print(f"原始的 datetime 对象: {now}")
# 输出: 原始的 datetime 对象: 2025-10-27 15:30:05.123456
# 2. 使用 strftime 格式化为不同格式的字符串
# 常见的 ISO 8601 格式
iso_format = now.strftime("%Y-%m-%d %H:%M:%S")
print(f"ISO 格式: {iso_format}")
# 输出: ISO 格式: 2025-10-27 15:30:05
# 更友好的可读格式
readable_format = now.strftime("%A, %B %d, %Y at %I:%M %p")
print(f"友好格式: {readable_format}")
# 输出: 友好格式: Friday, October 27, 2025 at 03:30 PM
# 只包含日期
date_only = now.strftime("%Y/%m/%d")
print(f"仅日期: {date_only}")
# 输出: 仅日期: 2025/10/27
# 只包含时间
time_only = now.strftime("%H:%M:%S")
print(f"仅时间: {time_only}")
# 输出: 仅时间: 15:30:05
# 带有微秒
with_microseconds = now.strftime("%Y-%m-%d %H:%M:%S.%f")
print(f"带微秒: {with_microseconds}")
# 输出: 带微秒: 2025-10-27 15:30:05.123456

strptime():将字符串转为 datetime 对象

当你从文件、用户输入或 API 接收到一个日期时间字符串,并需要对其进行计算或比较时,就需要使用 strptime() 将其转换回 datetime 对象。

Python 如何格式化 datetime?-图2
(图片来源网络,侵删)

语法

datetime.strptime(date_string, format_code)
  • date_string: 要解析的字符串。
  • format_code: 描述 date_string 格式的代码,必须与字符串的格式完全匹配。

示例

from datetime import datetime
# 1. 定义一个日期时间字符串
date_string = "2025-10-27 15:30:00"
print(f"原始的字符串: '{date_string}'")
# 2. 使用 strptime 解析为 datetime 对象
# 格式代码必须与字符串格式一一对应
dt_object = datetime.strptime(date_string, "%Y-%m-%d %H:%M:%S")
print(f"解析后的 datetime 对象: {dt_object}")
print(f"对象的类型: {type(dt_object)}")
# 输出:
# 原始的字符串: '2025-10-27 15:30:00'
# 解析后的 datetime 对象: 2025-10-27 15:30:00
# 对象的类型: <class 'datetime.datetime'>
# 3. 另一个例子,使用不同的格式
date_string_2 = "27-Oct-23"
dt_object_2 = datetime.strptime(date_string_2, "%d-%b-%y")
print(f"\n解析 '{date_string_2}': {dt_object_2}")
# 输出:
# 解析 '27-Oct-23': 2025-10-27 00:00:00
# 4. 如果格式不匹配,会抛出 ValueError
try:
    datetime.strptime("2025/10/27", "%Y-%m-%d") # 格式代码和字符串中的分隔符不匹配
except ValueError as e:
    print(f"\n发生错误: {e}")
# 输出:
# 发生错误: time data '2025/10/27' does not match format '%Y-%m-%d'

常见场景与最佳实践

获取当前时间并格式化

这是最常见的用途。

from datetime import datetime
# 获取当前时间
now = datetime.now()
# 格式化为 "YYYY-MM-DD" 格式
date_str = now.strftime("%Y-%m-%d")
print(f"今天的日期是: {date_str}")
# 格式化为 "HH:MM:SS" 格式
time_str = now.strftime("%H:%M:%S")
print(f"现在的时间是: {time_str}")

解析用户输入的日期

假设用户输入了一个日期,你需要将其转换为 datetime 对象才能进行后续操作。

from datetime import datetime
user_input = "2025-01-01"
try:
    # 尝试解析
    new_year = datetime.strptime(user_input, "%Y-%m-%d")
    print(f"成功解析: {new_year}")
    # 现在可以进行计算了
    from datetime import timedelta
    day_after_new_year = new_year + timedelta(days=1)
    print(f"元旦后一天是: {day_after_new_year.strftime('%Y-%m-%d')}")
except ValueError:
    print(f"错误: 日期格式 '{user_input}' 无效,请使用 YYYY-MM-DD 格式。")

日志记录

在日志中,通常希望时间戳格式统一且精确。

from datetime import datetime
log_message = "用户登录成功"
timestamp = datetime.now().strftime("%Y-%m-%d %H:%M:%S.%f")
# 构造日志行
log_entry = f"[{timestamp}] INFO: {log_message}"
print(log_entry)
# 输出: [2025-10-27 15:30:05.123456] INFO: 用户登录成功

Python 3.11+ 的新特性:strftimeflags 参数

在 Python 3.11 及更高版本中,strftimestrptime 标准化了一些行为,并引入了 flags 参数(目前主要用于处理不同历法的转换,如 datetime.SH_FLAG_FOUR_DIGIT_YEAR),但对于绝大多数日常使用,上述方法仍然是标准且最常用的。

Python 如何格式化 datetime?-图3
(图片来源网络,侵删)
方法 全称 功能 输入 输出
strftime() str format time 格式化 datetime 对象 字符串
strptime() str parse time 解析 字符串 datetime 对象

记住这两个方法的名字和功能,以及常用的格式化代码(%Y, %m, %d, %H, %M, %S),你就能应对绝大多数 Python 日期时间格式化的需求了。

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