将日期时间格式化为带毫秒的字符串

368 投票
16 回答
831572 浏览
提问于 2025-04-17 03:17

我该如何把一个 datetime 对象格式化成带有毫秒的字符串呢?

16 个回答

35

@Cabbi 提出了一个问题,在某些系统上(比如使用 Python 2.7 的 Windows 系统),微秒格式 %f 可能会错误地返回 "0",所以简单地去掉最后三个字符并不一定能解决问题。这些系统的表现并不符合 文档 中的说明:

指令 含义 示例
%f 微秒以十进制数字表示,前面补零到6位。 000000, 000001, …, 999999

下面的代码小心翼翼地格式化一个带有毫秒的时间戳:

>>> from datetime import datetime
>>> (dt, micro) = datetime.utcnow().strftime('%Y-%m-%d %H:%M:%S.%f').split('.')
>>> "%s.%03d" % (dt, int(micro) / 1000)
'2016-02-26 04:37:53.133'

为了得到提问者想要的确切输出,我们需要去掉标点符号:

>>> from datetime import datetime
>>> (dt, micro) = datetime.utcnow().strftime('%Y%m%d%H%M%S.%f').split('.')
>>> "%s%03d" % (dt, int(micro) / 1000)
'20160226043839901'
163

在Python 3.6及以上版本中,你可以设置isoformattimespec选项:

>>> from datetime import datetime
>>> datetime.utcnow().isoformat(sep=' ', timespec='milliseconds')
'2019-05-10 09:08:53.155'
654

如果你想得到一个包含毫秒的日期字符串,可以用 [:-3] 来去掉 %f(微秒)的最后三位数字:

>>> from datetime import datetime
>>> datetime.utcnow().strftime('%Y-%m-%d %H:%M:%S.%f')[:-3]
'2022-09-24 10:18:32.926'

或者可以更简洁一些:

>>> from datetime import datetime
>>> datetime.utcnow().strftime('%F %T.%f')[:-3]
'2022-09-24 10:18:32.926'

想了解更多关于 "%" 格式代码的信息,可以查看 Python文档,还有 strftime(3) 手册页,里面有完整的列表。

撰写回答