python2.6.6 Convierte la marca de tiempo del registro de apache a segundos desde la época (estilo unix)

Como estoy completamente perdido en las docenas de formas que encuentra en stackoverflow para hacer conversiones de marca de tiempo, por lo que haré aquí la pregunta completa:

Convierta esta marca de tiempo de un registro de apache (en la zona horaria CEST):

30/Aug/2015:05:13:53 +0200 

Dentro de esto:

 1440904433 

Utilizando

 $ python --version Python 2.6.6 

Verificación:

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

Los malos resultados son:

 1440911633 1440908033 

Mi código actual va hasta aquí:

 >>> 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)) 

Por favor, no proponga el módulo Pytz, no lo tengo y no puedo instalarlo. Por favor, no proponga soluciones para python3

Dos pasos:

  1. Convierta la cadena de tiempo en un objeto datetime consciente (o un objeto datetime ingenuo que represente el tiempo en 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)) 

    Ya lo has hecho. Consulte ¿Cómo analizar fechas con la cadena de zona horaria -0400 en python? sobre cómo hacerlo utilizando sólo stdlib.

  2. Convierta un objeto datetime consciente a “segundos desde la Época” :

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

    Use / y habilite from __future__ import division , para obtener fracciones de segundo. Si no necesitas apoyar fracciones; Podrías simplificar la fórmula:

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

    Si obtiene una hora de utc en el 1er paso usando solo stdlib, entonces no necesita dateutil.tz aquí. Consulte Conversión de datetime.date en la marca de hora UTC en Python

Aquí hay una solución de Python 3 para los visitantes de un motor de búsqueda:

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