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

时间:2017-01-13 13:18:15

标签: python datetime unix-timestamp

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

5 个答案:

答案 0 :(得分:28)

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

  1. 将时间字符串转换为datetime对象
  2. datetime对象的时间戳乘以1000,将其转换为毫秒。
  3. 例如:

    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对象的。格式字符串(第二个参数)指定您传递的字符串的实际格式

    以下是official documentation

    中格式说明符的说明
    • %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)