如何将格式为20.12.2016 09:38:42,76
的人类可读时间转换为毫秒的Unix时间戳?我发现了很多类似的问题,但没有找到这个具体的问题/答案。
答案 0 :(得分:28)
在Python 3中,这可以分两步完成:
datetime
对象datetime
对象的时间戳乘以1000,将其转换为毫秒。例如:
from datetime import datetime
dt_obj = datetime.strptime('20.12.2016 09:38:42,76',
'%d.%m.%Y %H:%M:%S,%f')
millisec = dt_obj.timestamp() * 1000
print(millisec)
输出:
1482223122760.0
strptime
接受您的时间字符串和格式字符串作为输入。 timestring(第一个参数)指定您实际想要转换为datetime
对象的。格式字符串(第二个参数)指定您传递的字符串的实际格式。
%d
- 作为零填充十进制数的月中的某一天。%m
- 月份为零填充十进制数。%Y
- 以十进制数字为世纪的年份%H
- 小时(24小时制)作为零填充十进制数。%M
- 分钟为零填充十进制数。%S
- 第二个作为零填充十进制数。%f
- Microsecond为十进制数字,左侧为零填充。答案 1 :(得分:7)
对于Python2.7 - 修改MYGz的答案是不剥离毫秒:
from datetime import datetime
d = datetime.strptime("20.12.2016 09:38:42,76", "%d.%m.%Y %H:%M:%S,%f").strftime('%s.%f')
d_in_ms = int(float(d)*1000)
print(d_in_ms)
print(datetime.fromtimestamp(float(d)))
输出:
1482248322760
2016-12-20 09:38:42.760000
答案 2 :(得分:6)
您需要使用strptime解析时间格式。
>>> import time
>>> from datetime import datetime
>>> ts, ms = '20.12.2016 09:38:42,76'.split(',')
>>> ts
'20.12.2016 09:38:42'
>>> ms
'76'
>>> dt = datetime.strptime(ts, '%d.%m.%Y %H:%M:%S')
>>> time.mktime(dt.timetuple())*1000 + int(ms)*10
1482223122760.0
答案 3 :(得分:3)
对于Python2.7
您可以将其格式化为秒,然后乘以1000以转换为毫秒。
from datetime import datetime
d = datetime.strptime("20.12.2016 09:38:42,76", "%d.%m.%Y %H:%M:%S,%f").strftime('%s')
d_in_ms = int(d)*1000
print(d_in_ms)
print(datetime.fromtimestamp(float(d)))
输出:
1482206922000
2016-12-20 09:38:42
答案 4 :(得分:0)
对于那些在不解析和丢失毫秒的情况下搜索答案的人,
给定dt_obj
是日期时间:
仅python3,优雅
int(dt_obj.timestamp() * 1000)
与python2和python3兼容:
import time
int(time.mktime(dt_obj.utctimetuple()) * 1000 + dt_obj.microsecond / 1000)