You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python使用strftime将秒数转为%H:%M:%S.%f格式时%f占位符不生效

问题原因

time.strftime()依赖操作系统原生C库的strftime实现,绝大多数平台的原生实现不支持%f微秒/毫秒占位符,所以代码中写的%f会被当成普通字符串直接输出,最终得到06:08:04.%f的结果。

解决方案

方案1:使用datetime模块(推荐)

datetime模块的strftime是Python独立实现的,不依赖系统底层能力,原生支持%f微秒占位符。注意%f默认输出6位微秒,要得到3位毫秒格式,直接截取字符串后3位即可。

from datetime import datetime

# 如果是pcap等场景返回的timeval结构(同时包含tv_sec秒、tv_usec微秒字段)
total_ts = pkt_time_cap.tv_sec + pkt_time_cap.tv_usec / 1_000_000
# 转成本地时间后格式化,[:-3]切掉最后3位微秒,得到3位毫秒
time_cap = datetime.fromtimestamp(total_ts).strftime('%H:%M:%S.%f')[:-3]

print(time_cap)

如果时间戳只有整数秒、没有毫秒精度,直接传入pkt_time_cap.tv_sec即可,输出的毫秒位会自动补为000。如果需要UTC时间,把fromtimestamp替换为utcfromtimestamp即可。

方案2:手动拼接毫秒段(兼容time模块使用场景)

如果必须沿用time模块的逻辑,可以单独计算毫秒值,和time.strftime生成的时分秒字符串手动拼接:

import time

time_struct = time.localtime(pkt_time_cap.tv_sec)
# 有微秒字段就换算成3位毫秒,没有就补0
ms = int(pkt_time_cap.tv_usec / 1000) if hasattr(pkt_time_cap, 'tv_usec') else 0
time_cap = f"{time.strftime('%H:%M:%S', time_struct)}.{ms:03d}"

print(time_cap)

如果需要UTC时间,把localtime替换为gmtime即可。

内容的提问来源于stack exchange,提问作者D-LA

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 11:30:48