Obtener la abreviatura de la zona horaria del desplazamiento UTC

Tengo el offset UTC en mi DB para los usuarios:

+5:30 

¿Cómo puedo obtener la abreviatura de la zona horaria de este desplazamiento UTC usando Python?

Como

 +5:30 => IST 

¿Es posible hacer esto usando Python?

Esto no es posible.

  • Hay muchas zonas horarias que comparten el mismo desplazamiento. Vea este artículo de Wikipedia para más detalles .

  • No hay un estándar uniforme para las abreviaturas de zona horaria. Hay algunos listados aquí y aquí , y puede ver que hay duplicados en ambas direcciones.

    Por ejemplo:

    • CST puede ser -5: 00, -6: 00, +8: 00, +9: 30 o +10: 30.
    • -10: 00 podría ser HST, HAST, TAHT o CKT

Lea también la sección “Zona horaria! = Desplazamiento” de la etiqueta de zona horaria aquí en StackOverflow.

Puede obtener un conjunto ( cero o más ) de abreviaturas de zona horaria (como se especifica en la base de datos tz ) que corresponde al desplazamiento UTC dado ahora:

 #!/usr/bin/env python from datetime import datetime, timedelta import pytz # $ pip install pytz utc_offset = timedelta(hours=5, minutes=30) # +5:30 now = datetime.now(pytz.utc) # current time print({now.astimezone(tz).tzname() for tz in map(pytz.timezone, pytz.all_timezones_set) if now.astimezone(tz).utcoffset() == utc_offset}) 

Salida

 set(['IST']) 

Si desea obtener abreviaturas incluyendo los datos históricos:

 #!/usr/bin/env python from datetime import datetime, timedelta import pytz # $ pip install pytz utc_offset = timedelta(hours=5, minutes=30) # +5:30 abbr = set() now = datetime.now(pytz.utc) for tz in map(pytz.timezone, pytz.all_timezones_set): dt = now.astimezone(tz) tzinfos = getattr(tz, '_tzinfos', [(dt.utcoffset(), dt.dst(), dt.tzname())]) abbr.update(tzname for off, _, tzname in tzinfos if off == utc_offset) print(abbr) 

Salida

 set(['IST']) 

Como dijo Matt, pasar de la zona horaria a la zona horaria no tiene mucho sentido.

En caso de que estuviera buscando un objeto pytz.timezone apropiado para un desplazamiento dado:

hay zonas horarias que van desde "Etc/GMT-14" a "Etc/GMT+12"

Basta con echar un vistazo a pytz.all_timezones .

Usándolos, pude usar una entrada de cliente defectuosa (confundiendo la zona horaria con el desplazamiento) para adjuntar un objeto válido de zona horaria a mi usuario.