ZoneId ID的本地化名称

Ste*_*ich 2 java timezone java-8

我有一个我希望用户可以选择的时区列表.所以,我以为我可以调用java.time.ZoneId.getAvailableZoneIds()并使用getDisplayName它们的方法.这导致了许多重复的条目,如

中欧时间

即使我添加了时区偏移,它们也不是不可取的.但是,a的ID ZoneId区分条目但我如何本地化它们?ID始终为英文

欧洲/罗马

Man*_*dis 6

这是可以通过打电话来想显示名称的本地化版本getDisplayName上一个ZoneId实例.这将需要迭代结果getAvailableZoneIds():

ZoneId.getAvailableZoneIds().stream()
        .map(ZoneId::of)
        .map(zid -> zid.getDisplayName(TextStyle.FULL, Locale.GERMAN))
        .distinct()
        .forEach(System.out::println);
Run Code Online (Sandbox Code Playgroud)

请注意TextStyle更改每个区域标题大小的参数以及.distinct()获取唯一结果的方法.

  • @OleV.V. 这是一个选项,但那时您的语言有所不同。因此,如果您的用户是德国人,则将显示“Zentraleuropäische Zeit - Europe/Rome”之类的项目,将德语和英语区域 ID 混合在一起。 (2认同)
  • 我发现区域设置支持是有限的。例如: `ZoneId.of("Asia/Tokyo").getDisplayName(TextStyle.FULL, Locale.forLanguageTag("jp"))` 生成“日本时间” (2认同)