将 python 日期时间转换为以毫秒为单位的时间戳

Convert python datetime to timestamp in milliseconds

如何将人类可读的时间(例如 20.12.2016 09:38:42,76 转换为 毫秒 的 Unix 时间戳?

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

  1. 将时间字符串转换为 datetime 对象
  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)

输出:

1482223122760.0

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

这里是official documentation格式说明符的解释:

  • %d - 以 zero-padded 十进制数表示的月中的第几天。
  • %m - zero-padded 十进制数形式的月份。
  • %Y - 以十进制表示世纪的年份
  • %H - 小时(24 小时制)作为 zero-padded 十进制数。
  • %M - zero-padded 十进制数的分钟。
  • %S - 秒为 zero-padded 十进制数。
  • %f - 微秒为十进制数,zero-padded 为 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

对于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

对于 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

对于那些搜索答案不解析而丢失毫秒的人, 给定 dt_obj 是一个日期时间:

python3而已,优雅

int(dt_obj.timestamp() * 1000)

python2 和 python3 兼容:

import time

int(time.mktime(dt_obj.utctimetuple()) * 1000 + dt_obj.microsecond / 1000)

很多这些答案都没有保留日期时间的毫秒数。这对我有用

def datetime_to_ms_epoch(dt):
    microseconds = time.mktime(dt.timetuple()) * 1000000 + dt.microsecond
    return int(round(microseconds / float(1000)))