杰瑞科技汇

Python中如何用strftime格式化毫秒?

%f 是关键

Python 的 datetime 模块的 strftime 方法使用 %f 来表示微秒(1秒 = 1,000,000微秒)。

Python中如何用strftime格式化毫秒?-图1
(图片来源网络,侵删)
  • %f: 6位数字的微秒,格式为 000000999999

因为 1毫秒 = 1000微秒,所以我们可以利用 %f 来轻松获取毫秒。


直接使用 %f(最常用)

这是最直接、最简单的方法,你只需要在格式字符串中加入 %f 即可。

示例代码:

import datetime
# 获取当前时间
now = datetime.datetime.now()
# 使用 %f 格式化,包含微秒
formatted_with_microseconds = now.strftime("%Y-%m-%d %H:%M:%S.%f")
print(f"完整微秒时间: {formatted_with_microseconds}")
# 如果只想显示毫秒,可以手动截取
# 格式字符串中,%f 会填充6位,我们取前3位
formatted_with_milliseconds = now.strftime("%Y-%m-%d %H:%M:%S.") + now.strftime("%f")[:3]
print(f"截取毫秒时间: {formatted_with_milliseconds}")

输出结果:

Python中如何用strftime格式化毫秒?-图2
(图片来源网络,侵删)
完整微秒时间: 2025-10-27 15:30:45.123456
截取毫秒时间: 2025-10-27 15:30:45.123

解释:

  1. now.strftime("%Y-%m-%d %H:%M:%S.%f") 会生成一个包含完整6位微秒的字符串。
  2. now.strftime("%f")[:3] 会先获取6位微秒的字符串,然后通过切片 [:3] 只保留前3位,也就是毫秒。

先格式化到秒,再拼接毫秒(更灵活)

这种方法在某些情况下可能更清晰,特别是当你需要更精细地控制毫秒的显示格式(比如不足3位补零)时。

示例代码:

import datetime
now = datetime.datetime.now()
# 1. 格式化到秒
time_to_seconds = now.strftime("%Y-%m-%d %H:%M:%S")
# 2. 获取微秒对象
microseconds = now.microsecond
# 3. 将微秒转换为毫秒 (整数除法)
milliseconds = microseconds // 1000
# 4. 拼接起来
# 使用 f-string 格式化,可以轻松控制补零
formatted_time = f"{time_to_seconds}.{milliseconds:03d}"
print(f"方法二结果: {formatted_time}")

输出结果:

方法二结果: 2025-10-27 15:30:45.123

解释:

  • now.microsecond 直接获取一个表示微秒的整数(0-999999)。
  • // 1000 是整数除法,将微秒转换为毫秒(0-999)。
  • f"{milliseconds:03d}" 是一个 f-string 的格式化语法,03d 表示将数字格式化为3位十进制整数,不足的前面补零,如果 milliseconds5,它会显示为 005,这比手动切片更健壮。

处理 time 对象(time.strftime 的限制)

如果你使用的是 datetime.time 对象,需要注意一个重要的限制:time.strftime 不支持 %f

示例代码(会报错):

import datetime
import time
# 创建一个 time 对象
t = datetime.time(12, 30, 45, 123456) # 12:30:45.123456
# 这行代码会报错!
# ValueError: Invalid format string
# formatted = t.strftime("%H:%M:%S.%f")

如何解决? 解决方案和 datetime 对象类似,手动拼接:

import datetime
t = datetime.time(12, 30, 45, 123456)
# 手动格式化时分秒
time_str = t.strftime("%H:%M:%S")
# 获取毫秒
milliseconds = t.microsecond // 1000
# 拼接
formatted_time = f"{time_str}.{milliseconds:03d}"
print(f"time对象带毫秒: {formatted_time}")

输出结果:

time对象带毫秒: 12:30:45.123

总结与最佳实践

场景 推荐方法 优点 缺点
datetime 对象 方法一 (%f + 切片) 代码最简洁,一行搞定。 切片 [:3] 假设 %f 总是6位,虽然几乎总是如此,但理论上不够“显式”。
datetime 对象 方法二 (拼接) 逻辑清晰,易于理解,使用 03d 可以完美处理补零。 代码稍多,需要几步操作。
time 对象 方法二 (拼接) 唯一可行的方法,因为 time.strftime 不支持 %f 需要手动处理。

综合推荐:

对于 datetime 对象,方法一 是最常用和最 Pythonic 的方式,简洁高效。 对于 time 对象,必须使用方法二

常见格式化代码速查表

格式代码 含义 示例
%Y 4位年份 2025
%m 2位月份 (01-12) 10
%d 2位日期 (01-31) 27
%H 2位小时 (24小时制, 00-23) 15
%M 2位分钟 (00-59) 30
%S 2位秒 (00-59) 45
%f 6位微秒 (000000-999999) 123456
%z UTC偏移量 (e.g., +0800) +0800
%Z 时区名称 (e.g., CST) CST
分享:
扫描分享到社交APP
上一篇
下一篇