Как преобразовать человекообразное время с форматом 20.12.2016 09:38:42,76
в временные метки Unix в миллисекундах? Я нашел много подобных вопросов, но не нашел этого конкретного вопроса/ответа.
Преобразование даты и времени python в метку времени в миллисекундах
Ответ 1
В Python 3 это можно сделать в 2 этапа:
- Преобразовать временную строку в объект
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
принимает вашу временную строку и строку формата в качестве входных данных. Временная строка (первый аргумент) указывает, что вы действительно хотите преобразовать в объект 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)