kiedyś pytz
wygenerować TZINFOS
mapowanie:
from datetime import datetime as dt
import pytz
from dateutil.tz import gettz
from pytz import utc
from dateutil import parser
def gen_tzinfos():
for zone in pytz.common_timezones:
try:
tzdate = pytz.timezone(zone).localize(dt.utcnow(), is_dst=None)
except pytz.NonExistentTimeError:
pass
else:
tzinfo = gettz(zone)
if tzinfo:
yield tzdate.tzname(), tzinfo
TZINFOS
Zastosowanie
>>> TZINFOS = dict(gen_tzinfos())
>>> TZINFOS
{'+02': tzfile('/usr/share/zoneinfo/Antarctica/Troll'),
'+03': tzfile('/usr/share/zoneinfo/Europe/Volgograd'),
'+04': tzfile('Europe/Ulyanovsk'),
'+05': tzfile('/usr/share/zoneinfo/Indian/Kerguelen'),
...
'WGST': tzfile('/usr/share/zoneinfo/America/Godthab'),
'WIB': tzfile('/usr/share/zoneinfo/Asia/Pontianak'),
'WIT': tzfile('/usr/share/zoneinfo/Asia/Jayapura'),
'WITA': tzfile('/usr/share/zoneinfo/Asia/Makassar'),
'WSDT': tzfile('/usr/share/zoneinfo/Pacific/Apia'),
'XJT': tzfile('/usr/share/zoneinfo/Asia/Urumqi')}
parser
Zastosowanie
>>> date_str = 'Sat, 11/01/09 8:00PM EST'
>>> tzdate = parser.parse(date_str, tzinfos=TZINFOS)
>>> tzdate.astimezone(utc)
datetime.datetime(2009, 11, 2, 1, 0, tzinfo=<UTC>)
Konwersja UTC jest konieczność ed, ponieważ dla każdego skrótu dostępnych jest wiele stref czasowych. Od TZINFOS
jest dict
, ma tylko ostatnią strefę czasową na skrót. I nie możesz dostać tego, którego oczekiwałeś przed konwersją.
>>> tzdate
datetime.datetime(2009, 11, 1, 20, 0, tzinfo=tzfile('/usr/share/zoneinfo/America/Port-au-Prince'))
Czy jest to łatwiejsze, jeśli ograniczymy je do stref czasowych w USA? Czy istnieje "standardowy" zestaw skrótów w tym zdarzeniu? –
Nie zapominaj, że "strefy czasowe w USA" obejmują AKST, AKDT, HAST i HADT. Jeśli masz na myśli kontynentalną 48 stanów, to masz tylko 8 3-listowych stref czasowych, którymi możesz się zająć (4 strefy czasowe, czas standardowy i letni). – PaulMcG
Wygląda na to, że niektóre miejsca używają HST i HDT jako odpowiedników dla HAST i HADT też = \ –