2017-01-13 4 views
7

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

+1

Вам необходимо предоставить соответствующую строку формата для 'datetime.datetime.strptime'. См. [Docs] (https://docs.python.org/2/library/datetime.html#strftime-and-strptime-behavior). –

ответ

8

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

  1. Преобразовать TimeString в datetime объект
  2. Multiply Отметка времени 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 принимает ваш TimeString и форматирует строку в качестве входных данных. Timestring (первый аргумент) указывает что вы на самом деле хотите конвертировать в объект datetime. Строка формата (второй аргумент) указывает фактический формат строки, которую вы прошли.

Вот объяснение спецификаторов формата от official documentation:

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

Эй, спасибо. К сожалению, я получил ошибку «AttributeError: объект datetime.datetime» не имеет атрибута «timestamp». Возможно, потому что я использую Python 2.7? – Tom

+0

Да.Ответ MYGz для Python 2.7 – Milo

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 
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 
+0

Эй, спасибо! Я копирую и вставляю код и получаю строку ValueError: Invalid format. – Tom

+0

@Tom Python версия? Он работает для меня на Python2.7.6 – MYGz

+0

Я использую Python 2.7.12. – Tom

Смежные вопросы