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

2 投票
1 回答
740 浏览
提问于 2025-04-16 01:40

如果我调用 win32timezone.TimeZoneInfo.local().timeZoneName,它会给我当前地区的时区名称(比如在日本的电脑上,它返回 u"東京 (標準時)")。

我想把这个名称转换成Olsen数据库中的时区名称,以便和 pytz 一起使用。虽然 CLDR windowZones.xml 可以帮助我把英文名称对应起来,但它处理不了日文名称。

我该如何把这个名称转换回英文呢(在这种情况下应该是 Tokyo Standard Time)?

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 对象里用就好了,而不是需要调用一个私有的方法。

撰写回答