python2.6.6 Преобразование временной отметки времени Apache в секундах с эпохи (стиль unix)

Поскольку я полностью потерян в десятках способов, которые вы найдете в stackoverflow, чтобы сделать преобразования timestamp, поэтому я задам здесь полный вопрос:

Преобразуйте эту метку времени из журнала apache (в часовой пояс CEST):

  • Невозможно загрузить целевой WSGI-скрипт в качестве модуля Python
  • Запустите mod_wsgi с virtualenv или Python с версией, отличающейся по умолчанию системой
  • Django populate () не является повторным
  • Управление несколькими файлами settings.py
  • Ошибка Apache mod_wsgi: Запрещено У вас нет прав доступа / доступа на этом сервере
  • Привет, мир в mod_wsgi
  • 30/Aug/2015:05:13:53 +0200 

    В этом:

     1440904433 

    С помощью

     $ python --version Python 2.6.6 

    Проверка:

     $ date --date @1440904433 Sun Aug 30 05:13:53 CEST 2015 $ date -u --date @1440904433 Sun Aug 30 03:13:53 UTC 2015 

    Плохие результаты:

     1440911633 1440908033 

    Мой текущий код идет до:

     >>> from dateutil import parser >>> parser.parse("30/Aug/2015:05:13:53 +0200".replace(':',' ',1)) datetime.datetime(2015, 8, 30, 5, 13, 53, tzinfo=tzoffset(None, 7200)) 

    Пожалуйста, не предлагайте модуль pytz, у меня его нет, и я не могу его установить. Пожалуйста, не предлагайте решения для python3

  • Как получить текущее время в python и разбить на год, месяц, день, час, минуту?
  • Вставка объекта datetime.datetime Python в MySQL
  • Создайте столбец дня недели в кадре данных Pandas, используя Python
  • Извлечение исторических секунд прыжка из tzdata
  • Как найти разницу во времени между двумя объектами datetime в python?
  • pytz localize vs datetime replace
  • One Solution collect form web for “python2.6.6 Преобразование временной отметки времени Apache в секундах с эпохи (стиль unix)”

    Два шага:

    1. Преобразуйте временную строку в известный объект datetime (или наивный объект datetime который представляет время в UTC).

       >>> from dateutil import parser >>> parser.parse("30/Aug/2015:05:13:53 +0200".replace(':', ' ', 1)) datetime.datetime(2015, 8, 30, 5, 13, 53, tzinfo=tzoffset(None, 7200)) 

      Вы уже это сделали. См. Как анализировать даты с -0400 строки часового пояса в python? о том, как это сделать, используя только stdlib.

    2. Преобразовать известный объект datetime в «секунды с эпохи» :

       >>> from datetime import datetime >>> from dateutil import tz >>> td = d - datetime(1970, 1, 1, tzinfo=tz.tzutc()) >>> td datetime.timedelta(16677, 11633) >>> (td.microseconds + (td.seconds + td.days * 86400) * 10**6) // 10**6 1440904433 

      Используйте / и включите from __future__ import division , чтобы получить доли секунды. Если вам не нужна поддержка фракций; вы можете упростить формулу:

       >>> td.seconds + td.days * 86400 1440904433 

      Если вы получаете время utc на первом шаге, используя только stdlib, вам здесь не нужно dateutil.tz . См. Раздел Преобразование даты datetime.date в метку времени UTC в Python

    Вот решение Python 3 для посетителей из поисковой системы:

     >>> from datetime import datetime >>> d = datetime.strptime("30/Aug/2015:05:13:53 +0200", "%d/%b/%Y:%H:%M:%S %z") >>> d.timestamp() 1440904433.0 
    Python - лучший язык программирования в мире.