Използване на pytz за преобразуване от известна часова зона в местна

Получавам дата във фиксирана часова зона. Трябва да го конвертирам в часовата зона на локалната машина, но не знам какво е това. Как мога да направя това с помощта на pytz (не dateutil)? Намерих много решения, които използват dateutil, напр. този отговор, но не мога да намеря подобна функция в pytz.


person PAG    schedule 04.09.2012    source източник
comment
За съжаление причината да не можете да намерите подобна функция в pytz е, че тя не съществува. pytz изисква да посочите часовата зона, за да може да я търси.   -  person Mark Ransom    schedule 04.09.2012


Отговори (1)


Можете да конвертирате чрез (UTC) времево клеймо на Unix:

foreign_naive = datetime.datetime(2012, 3, 11, 6, 0, 0)
foreign_timezone = 'US/Eastern'
foreign_dt = pytz.timezone(foreign_timezone).localize(foreign_naive)
timestamp = time.mktime(foreign_dt).astimezone(pytz.utc).timetuple()
local_dt = datetime.datetime.fromtimestamp(timestamp)

Това използва решението от Python Create unix timestamp пет минути в бъдещето.

Обърнете внимание, че това няма да ви каже каква е местната часова зона, въпреки че можете да разберете нейното отместване спрямо UTC по това време, като използвате:

(local_dt - datetime.datetime.utcfromtimestamp(timestamp)).seconds
person ecatmur    schedule 04.09.2012
comment
Познаването на текущото отместване спрямо UTC няма да е полезно във всяка часова зона, използваща лятно часово време. - person Mark Ransom; 04.09.2012
comment
@MarkRansom това не е проблем; сравняването на datetime.datetime.fromtimestamp с datetime.datetime.utcfromtimestamp ви дава отместването при timestamp. - person ecatmur; 04.09.2012
comment
Първоначалният въпрос гласи, че часовата зона на локалната машина е неизвестна. - person Mark Ransom; 04.09.2012
comment
@MarkRansom правилно и не е нужно да знаете часовата зона на локалната машина, за да използвате datetime.datetime.fromtimestamp. - person ecatmur; 04.09.2012