Python的strptime能否处理logging模块的时间格式?
Python logging时间格式解析:关于strptime的%f兼容毫秒的问题
默认情况下,Python的logging模块会生成带毫秒的时间字符串,格式示例:2003-01-23 00:29:50,411。由于标准的strftime和strptime没有专门的毫秒格式说明符,logging是先通过strftime生成时间的其他部分,再单独插入毫秒值,这给标准库解析这类字符串带来了不便。
实际测试发现,用strptime配合%Y-%m-%d %H:%M:%S,%f格式可以正常解析这类字符串:虽然strftime里的%f会输出六位微秒,但strptime能够接受三位的毫秒值,并自动将后三位补零处理。
核心问题解答
是否是标准/有文档记录的行为?
目前在Python官方文档或man strptime中,都找不到关于strptime的%f格式符支持三位输入的明确说明,这属于未被文档化的实现细节。能否长期依赖该行为?
从当前Python版本的实际表现和广泛使用情况来看,这个行为是普遍存在的,但因为没有官方文档的背书,无法保证未来Python版本不会调整这一实现——无文档的细节存在被修改的风险。
替代方案
如果需要绝对的兼容性,可以在将时间字符串传入strptime之前,给毫秒部分补三个零(例如把,411替换为,411000),但这种方法确实不够优雅,非必要情况下不想使用也完全合理。
内容的提问来源于stack exchange,提问作者Draconis
相关产品推荐
相关产品推荐

