如何在Python中将非英语Windows时区名称映射到Olsen名称?

时间:2010-07-22 07:53:29

标签: python winapi timezone locale pywin32

如果我拨打win32timezone.TimeZoneInfo.local().timeZoneName,它会在当前区域设置中为我提供时区名称(例如,在日本机器上,它会返回u"東京 (標準時)")。

我想将此名称映射到Olsen数据库时区名称,以便与pytz一起使用。 CLDR windowZones.xml帮助我映射英文名称,但无法处理日文名称。

如何将名称转换回英语(在这种情况下应该是Tokyo Standard Time)?

1 个答案:

答案 0 :(得分: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对象中访问它,那将是很好的,而不必调用私有方法。