将日期时间格式化为带毫秒的字符串
我该如何把一个 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及以上版本中,你可以设置isoformat
的timespec
选项:
>>> 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)
手册页,里面有完整的列表。