将python datetime转换为时间戳,以毫秒为单位

Tom*_*Tom 29 python datetime unix-timestamp

如何将格式的人类可读时间转换20.12.2016 09:38:42,76为Unix时间戳(以毫秒为单位)?我发现了很多类似的问题,但没有找到这个具体的问题/答案.

Mil*_*ilo 42

在Python 3中,这可以分两步完成:

  1. 将timestring转换为datetimeobject
  2. 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)
Run Code Online (Sandbox Code Playgroud)

输出:

1482223122760.0
Run Code Online (Sandbox Code Playgroud)

strptime接受您的时间字符串和格式字符串作为输入.该TIMESTRING(第一个参数)指定什么你真的想转换为datetime对象.格式字符串(第二个参数)指定您传递的字符串的实际格式.

以下是官方文档中格式说明符的说明:

  • %d - 作为零填充十进制数的月中的某天.
  • %m - 月份为零填充十进制数.
  • %Y - 以十进制数表示的世纪年份
  • %H - 小时(24小时制)作为零填充十进制数.
  • %M - 分钟为零填充十进制数.
  • %S - 第二个作为零填充十进制数.
  • %f - 微秒作为十进制数,左边填零.


Iva*_*ass 14

对于那些在不解析和丢失毫秒的情况下搜索答案的人,给出的dt_obj是一个日期时间:

仅python3,优雅

int(dt_obj.timestamp() * 1000)
Run Code Online (Sandbox Code Playgroud)

python2和python3兼容:

import time

int(time.mktime(dt_obj.utctimetuple()) * 1000 + dt_obj.microsecond / 1000)
Run Code Online (Sandbox Code Playgroud)


Mat*_*Cox 9

对于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)))
Run Code Online (Sandbox Code Playgroud)

输出:

1482248322760
2016-12-20 09:38:42.760000
Run Code Online (Sandbox Code Playgroud)


Mau*_*yer 7

您需要使用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
Run Code Online (Sandbox Code Playgroud)