Я думаю, что лучше всего пройти через все часовые пояса pytz и проверить, какой из них соответствует локальному часовому поясу, каждый объект часового пояса pytz содержит информацию о utcoffset и tzname, например CDT, EST, ту же информацию о местном времени можно получить из time.timezone/altzone
и time.tzname
, и я думаю этого достаточно, чтобы правильно сопоставить местный часовой пояс в базе данных pytz, например
import time
import pytz
import datetime
local_names = []
if time.daylight:
local_offset = time.altzone
localtz = time.tzname[1]
else:
local_offset = time.timezone
localtz = time.tzname[0]
local_offset = datetime.timedelta(seconds=-local_offset)
for name in pytz.all_timezones:
timezone = pytz.timezone(name)
if not hasattr(timezone, '_tzinfos'):
continue#skip, if some timezone doesn't have info
# go thru tzinfo and see if short name like EDT and offset matches
for (utcoffset, daylight, tzname), _ in timezone._tzinfos.iteritems():
if utcoffset == local_offset and tzname == localtz:
local_names.append(name)
print local_names
вывод:
['America / Atikokan', 'America / Bahia_Banderas', 'America / Bahia_Banderas', 'America / Belize', 'America / Cambridge_Bay', 'America / Cancun', 'America / Chicago', 'America / Chihuahua', ' America / Coral_Harbour ',' America / Costa_Rica ',' America / El_Salvador ',' America / Fort_Wayne ',' Америка / Гватемала ',' America / Indiana / Indianapolis ',' America / Indiana / Knox ',' America / Indiana / Маренго ',' Америка / Индиана / Маренго ',' Америка / Индиана / Петербург ',' Америка / Индиана / Телл_Сити ',' Америка / Индиана / Вевей ',' Америка / Индиана / Винсеннес ',' Америка / Индиана / Винамак ' , 'Америка / Индианаполис', 'Америка / Икалуит', 'Америка / Кентукки / Луисвилл', 'Америка / Кентукки / Луисвилл', 'Америка / Кентукки / Монтичелло', 'Америка / Knox_IN', 'Америка / Луисвилл', ' Америка / Луисвилл, Америка / Манагуа, Америка / Матаморос, Америка / Меномини, Америка / Мерида, Америка / Мексика_Город, Америка / Монтеррей, Америка / Северная_Дакота / Беула, » America / North_Dakota / Center ',' America / North_Dakota / New_Salem ',' Америка / Оджин aga ',' America / Pangnirtung ',' America / Rainy_River ',' America / Rankin_Inlet ',' America / Resolute ',' America / Resolute ',' America / Tegucigalpa ',' America / Winnipeg ',' CST6CDT ',' Канада / Центральная »,« Мексика / Общие »,« США / Центральная »,« США / Восточная Индиана »,« США / Индиана-Старк »]
В производственной среде вы можете создать такое сопоставление заранее и сохранить его вместо того, чтобы постоянно повторять.
Скрипт тестирования после смены часового пояса:
$ export TZ = 'Австралия / Сидней'
$ python get_tz_names.py
['Антарктика / Маккуори', 'Австралия / ACT', 'Австралия / Брисбен', 'Австралия / Канберра', 'Австралия / Карри' , "Австралия / Хобарт", "Австралия / Линдеман", "Австралия / Мельбурн", "Австралия / Новый Южный Уэльс", "Австралия / Квинсленд", "Австралия / Сидней", "Австралия / Тасмания", "Австралия / Виктория"]
person
Anurag Uniyal
schedule
30.11.2011
America/New_York
) текущего пользовательского языкового стандарта в Linux? - person wberry   schedule 06.10.2011