Как преобразовать строку HH: MM: SS в эпоху UNIX?

У меня есть программа (утилита командной строки sar), которая выводит ее строки со столбцом времени. Я разбираю этот файл с моим python script, и я хотел бы преобразовать sar 02:31:33 PM в эпохи, например. 1377181906 (текущий год, месяц и день с часами, минутами и секундами от вышеупомянутой строки). Как это можно сделать менее громоздким способом? Я попытался сделать это сам, но застрял со временем/временем и стадом своих методов.

2 ответа

Вот один из способов сделать это:

  • прочитайте строку в datetime, используя strptime
  • установить год, месяц, день объекта datetime в текущую дату, месяц и день с помощью replace
  • конвертировать datetime в временную метку unix через calendar.timegm
>>> from datetime import datetime
>>> import calendar
>>> dt = datetime.strptime("02:31:33 PM", "%I:%M:%S %p")
>>> dt_now = datetime.now()
>>> dt = dt.replace(year=dt_now.year, month=dt_now.month, day=dt_now.day)
>>> calendar.timegm(dt.utctimetuple())
1377138693

Обратите внимание, что в python >= 3.3 вы можете получить метку времени из datetime, вызвав dt.timestamp().

Также смотрите:


Другой способ иметь время в эпоху - использовать mktime из модуля времени и передать временный кортеж даты, чтобы вы могли сделать это:

>>> from datetime import datetime
>>> from time import mktime
>>> dt = datetime.strptime("02:31:33 PM", "%H:%M:%S %p")
>>> dt_now = datetime.now()
>>> dt = dt.replace(year=dt_now.year, month=dt_now.month, day=dt_now.day)
>>> int(mktime(dt.timetuple()))
1377131493

licensed under cc by-sa 3.0 with attribution.