Определение часового пояса в Python - PullRequest
2 голосов
/ 22 августа 2010

Учитывая локальную метку времени и метку времени UTC, возможно ли определить часовой пояс и действует ли DST?

Ответы [ 2 ]

2 голосов
/ 22 августа 2010

Если ваша «временная метка UTC» представляет собой число с плавающей запятой (достаточно int) «секунд из эпохи», а ваша «местная временная метка» является какой-то странной версией ее, сдвинутой в ваши координаты местного времени (нет «эпохи» кроме UTC) достаточно модуля время в стандартной библиотеке Python.

Как показывают эти документы, в «секундах от эпохи» gmtime переводит это в кортеж из 9 предметов в UTC, localtime в кортеж из 9 предметов по местному времени; наоборот, calendar.timegm (кортеж из 9 элементов UTC в метку времени UTC) и mktime (кортеж из 9 элементов местного времени в метку времени UTC). Вы заметите, что не существует такой вещи, как «локальная временная метка» (только кортежи из 9 элементов по местному времени, то есть struct_time экземпляров), просто потому, что такого понятия не существует.

Но, если я правильно понимаю, что вы подразумеваете под «локальной меткой времени», то перевод ее в структурное время «как если бы» это была реальная метка времени, а затем обратно в местное время, даст смещение, к которому вы стремитесь (в секунд). Что касается DST, то немногое говорит о том, включен ли он, - это 9-й элемент из упомянутых нами кортежей.

Например, используя только «локальную метку времени»:

>>> loct
1282453595
>>> time.mktime(time.gmtime(loct)) - loct
28800.0
>>> _ / 3600
8.0
>>> 

Здесь написано, что я в 8 часах к западу от UTC. И:

>>> time.localtime(loct)[-1]
1

это говорит о том, что равно с действующим DST.

0 голосов
/ 22 августа 2010

Попробуйте взглянуть на http://docs.python.org/library/datetime.html#datetime.datetime для встроенной поддержки даты, времени и часовых поясов.

Если вам нужна более мощная библиотека, взгляните на предложения здесь: Полнофункциональная библиотека даты и времени

...