2

を呼び出すとwin32timezone.TimeZoneInfo.local().timeZoneName、現在のロケールのタイムゾーン名が表示されます(たとえば、日本のマシンでは、が返されますu"東京 (標準時)")。

この名前を、で使用するためにOlsenデータベースのタイムゾーン名にマップしたいと思いますpytzCLDR windowZones.xmlは、英語の名前をマップするのに役立ちますが、日本語の名前を処理できません。

名前を英語に戻すにはどうすればよいですか(Tokyo Standard Timeこの場合はそうする必要があります)?

4

1 に答える 1

3

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ただし、プライベートメソッドを呼び出す代わりに、オブジェクトでこれにアクセスできると便利です。

于 2010-07-22T07:55:44.077 に答える