Analizar la abreviatura de la zona horaria a UTC

¿Cómo puedo convertir una cadena de fecha y hora del formulario Feb 25 2010, 16:19:20 CET a la época de Unix?

Actualmente mi mejor enfoque es usar time.strptime() es este:

 def to_unixepoch(s): # ignore the time zone in strptime a = s.split() b = time.strptime(" ".join(a[:-1]) + " UTC", "%b %d %Y, %H:%M:%S %Z") # this puts the time_tuple(UTC+TZ) to unixepoch(UTC+TZ+LOCALTIME) c = int(time.mktime(b)) # UTC+TZ c -= time.timezone # UTC c -= {"CET": 3600, "CEST": 2 * 3600}[a[-1]] return c 

Veo por otras preguntas que podría ser posible usar calendar.timegm() y pytz entre otras para simplificar esto, pero estas no controlan las zonas horarias abreviadas.

Me gustaría una solución que requiera un exceso mínimo de bibliotecas, me gustaría mantener la biblioteca estándar tanto como sea posible.

    La biblioteca estándar de Python realmente no implementa zonas horarias. Deberías usar python-dateutil . Proporciona extensiones útiles para el módulo de datetime y datetime estándar, incluida una implementación de zonas horarias y un analizador.

    Puede convertir los objetos de datetime hora de la zona horaria a UTC con .astimezone(dateutil.tz.tzutc()) . Para la hora actual como un objeto de fecha y hora compatible con la hora, puede usar datetime.datetime.utcnow().replace(tzinfo=dateutil.tz.tzutc()) .

     import dateutil.tz cet = dateutil.tz.gettz('CET') cesttime = datetime.datetime(2010, 4, 1, 12, 57, tzinfo=cet) cesttime.isoformat() '2010-04-01T12:57:00+02:00' cettime = datetime.datetime(2010, 1, 1, 12, 57, tzinfo=cet) cettime.isoformat() '2010-01-01T12:57:00+01:00' # does not automatically parse the time zone portion dateutil.parser.parse('Feb 25 2010, 16:19:20 CET')\ .replace(tzinfo=dateutil.tz.gettz('CET')) 

    Desafortunadamente, esta técnica estará equivocada durante la hora repetida del horario de verano.