我正在尝试将毫秒格式化为格式化字符串,保留毫秒部分。这是我的代码:
import time
time.strftime('%Y-%m-%d %H:%M:%S:%f', time.gmtime(1515694048121/1000.0))
其中 1515694048121是以毫秒为单位的时间。它回报我:
2018-01-11 18:07:28:f
正如我们所看到的,不会返回毫秒级的时间。
包含毫秒时间的正确格式是什么? '%Y-%m-%d %H:%M:%S:%f'
不正确吗?
答案 0 :(得分:5)
time.strftime(...)
中提到的无指令将返回毫秒。不确定从哪里获得使用%f
的引用。实际上time.gmtime(...)
只保持精度达到几秒钟。
作为一个黑客,为了实现这一点,你可以通过保留你的毫秒秒值来明确地格式化你的字符串:
>>> import time
>>> time_in_ms = 1515694048121
>>> time.strftime('%Y-%m-%d %H:%M:%S:{}'.format(time_in_ms%1000), time.gmtime(time_in_ms/1000.0))
'2018-01-11 18:07:28:121'
以下是有效指令列表:
+-----------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-------+
| Directive | Meaning | Notes |
+-----------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-------+
| %a | Locale’s abbreviated weekday name. | |
| %A | Locale’s full weekday name. | |
| %b | Locale’s abbreviated month name. | |
| %B | Locale’s full month name. | |
| %c | Locale’s appropriate date and time representation. | |
| %d | Day of the month as a decimal number [01,31]. | |
| %H | Hour (24-hour clock) as a decimal number [00,23]. | |
| %I | Hour (12-hour clock) as a decimal number [01,12]. | |
| %j | Day of the year as a decimal number [001,366]. | |
| %m | Month as a decimal number [01,12]. | |
| %M | Minute as a decimal number [00,59]. | |
| %p | Locale’s equivalent of either AM or PM. | (1) |
| %S | Second as a decimal number [00,61]. | (2) |
| %U | Week number of the year (Sunday as the first day of the week) as a decimal number [00,53]. All days in a new year preceding the first Sunday are considered to be in week 0. | (3) |
| %w | Weekday as a decimal number [0(Sunday),6]. | |
| %W | Week number of the year (Monday as the first day of the week) as a decimal number [00,53]. All days in a new year preceding the first Monday are considered to be in week 0. | (3) |
| %x | Locale’s appropriate date representation. | |
| %X | Locale’s appropriate time representation. | |
| %y | Year without century as a decimal number [00,99]. | |
| %Y | Year with century as a decimal number. | |
| %z | Time zone offset indicating a positive or negative time difference from UTC/GMT of the form +HHMM or -HHMM, where H represents decimal hour digits and M represents decimal minute digits [-23:59, +23:59]. | |
| %Z | Time zone name (no characters if no time zone exists). | |
| %% | | |
+-----------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-------+
答案 1 :(得分:1)
实际上time.gmtime获取输入参数的秒数。因此,不考虑毫秒:
>>> import time
>>> time.gmtime(1515694048121/1000.0) == time.gmtime(1515694048000/1000.0)
True
功能文档清楚地提到了它:
忽略一秒的分数。