Получавам дата във фиксирана часова зона. Трябва да го конвертирам в часовата зона на локалната машина, но не знам какво е това. Как мога да направя това с помощта на pytz (не dateutil)? Намерих много решения, които използват dateutil, напр. този отговор, но не мога да намеря подобна функция в pytz.
Използване на pytz за преобразуване от известна часова зона в местна
Отговори (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
Познаването на текущото отместване спрямо UTC няма да е полезно във всяка часова зона, използваща лятно часово време.
- person Mark Ransom; 04.09.2012
@MarkRansom това не е проблем; сравняването на
datetime.datetime.fromtimestamp
с datetime.datetime.utcfromtimestamp
ви дава отместването при timestamp
.
- person ecatmur; 04.09.2012
Първоначалният въпрос гласи, че часовата зона на локалната машина е неизвестна.
- person Mark Ransom; 04.09.2012
@MarkRansom правилно и не е нужно да знаете часовата зона на локалната машина, за да използвате
datetime.datetime.fromtimestamp
.
- person ecatmur; 04.09.2012
pytz
е, че тя не съществува.pytz
изисква да посочите часовата зона, за да може да я търси. - person Mark Ransom   schedule 04.09.2012