Как можно сопоставить неанглийские имена часовых поясов Windows с именами Olsen в Python? - PullRequest
2 голосов
/ 22 июля 2010

Если я позвоню win32timezone.TimeZoneInfo.local().timeZoneName, он выдаст мне имя часового пояса в текущей локали (например, на японском компьютере возвращается u"東京 (標準時)").

Я хотел бы сопоставить это имя с именем часового пояса базы данных Olsen для использования с pytz. CLDR windowZones.xml помогает мне отображать английские имена, но не может обработать японское имя.

Как я могу преобразовать имя обратно в английский (в данном случае оно должно быть Tokyo Standard Time)?

1 Ответ

3 голосов
/ 22 июля 2010

dict(win32timezone.TimeZoneInfo._get_indexed_time_zone_keys()) возвращает именно то отображение, которое мне нужно, от имени текущей локали до имени на английском. Следующий код решает это:

  import win32timezone
  win32tz_name = win32timezone.TimeZoneInfo.local().timeZoneName
  win32timezone_to_en = dict(win32timezone.TimeZoneInfo._get_indexed_time_zone_keys())
  win32timezone_name_en = win32timezone_to_en.get(win32tz_name, win32tz_name)
  olsen_name = win32timezones.get(win32timezone_name_en, None)
  if not olsen_name:
      raise ValueError(u"Could not map win32 timezone name %s (English %s) to Olsen timezone name" % (win32tz_name, win32timezone_name_en))
  return pytz.timezone(olsen_name)

Было бы неплохо, если бы это было доступно в объекте win32timezone.TimeZoneInfo, вместо того, чтобы вызывать закрытый метод.

...