Преобразование даты и времени python в метку времени в миллисекундах

Как преобразовать человекообразное время с форматом 20.12.2016 09:38:42,76 в временные метки Unix в миллисекундах? Я нашел много подобных вопросов, но не нашел этого конкретного вопроса/ответа.

Ответ 1

В Python 3 это можно сделать в 2 этапа:

  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. Строка формата (второй аргумент) указывает фактический формат строки, которую вы передали.

Вот описание спецификаторов формата из официальной документации:

  • %d - День месяца в виде десятичного числа с добавлением нуля.
  • %m - Месяц в виде десятичного числа с добавлением нуля.
  • %Y - Год со столетием в виде десятичного числа
  • %H - Час (24-часовой формат) в виде десятичного числа с добавлением нуля.
  • %M - Минута в виде десятичного числа с добавлением нуля.
  • %S - Второй как десятичное число с нулем.
  • %f - Микросекунда в виде десятичного числа, дополненная нулями слева.

Ответ 2

Для 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

Ответ 3

Вам нужно проанализировать свой формат времени, используя 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

Ответ 4

Для 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

Ответ 5

Для тех, кто ищет ответ без разбора и потери миллисекунд, задано dt_obj дата-время:

только на python3, элегантный

int(dt_obj.timestamp() * 1000)

совместимы как с python2, так и с python3:

import time

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