gpt4 book ai didi

java - 如何从 "(GMT+10:00) Brisbane"或 "(GMT+01:00) Brussels, Copenhagen, Madrid, Paris"等区域名称获取 Java 中的 TimeZone 对象

转载 作者:行者123 更新时间:2023-12-01 23:48:27 27 4
gpt4 key购买 nike

我能够从完整的字符串名称“Australia/Brisbane”中获取 Java 中的时区对象

TimeZone tz = TimeZone.getTimeZone("Australia/Brisbane");

如何从区域名称中获取 java.util.TimeZone
“(GMT+10:00) 布里斯类”或
“(GMT) 格林威治标准时间:都柏林、爱丁堡、里斯本、伦敦”或
“(GMT+01:00) 布鲁塞尔、哥本哈根、马德里、巴黎”或
“(GMT-09:00)阿拉斯加”

我需要转换成 TimeZone 对象的上述区域名称字符串来自 Windows 10 >>“日期和时间设置”>>“时区”下拉菜单。

最佳答案

"(GMT+10:00) Brisbane" 之类的字符串是显示名称。它们是旨在提高人类可读性的资源字符串,并本地化为特定语言(在本例中为英语)。它们可以并且确实会根据需要随时间变化。当本地化为其他语言时,它们会有所不同。

从你提供的那些来看,它们可能来自 Windows,但它们并不完全是 Windows 10 英文版的当前集合。它们可能来自旧版本的 Windows,但你应该自己验证一下。

相比之下,"Australia/Brisbane" 是一个 IANA时区标识符。它就是那个字符串,并且不会因语言而改变(即使其他语言有拼写或符号变化)。它们用于编程识别,例如通过传递给您展示的 getTimeZone API。

IANA time zones是 Java 中使用的主要标识符。 Windows 有自己的一套。等效的 Windows 标识符是 "E. Australia Standard Time" - 无论语言如何,它都是那个字符串。

Unicode Common Locale Data Repository (CLDR)项目维护 windowsZones.xml 中两组标识符之间的规范映射文件。它还包括当前英文 Windows 显示名称作为注释以帮助阅读文件。

简而言之:我不建议映射显示名称,因为它们已本地化并且可以更改。请改用标识符。

关于java - 如何从 "(GMT+10:00) Brisbane"或 "(GMT+01:00) Brussels, Copenhagen, Madrid, Paris"等区域名称获取 Java 中的 TimeZone 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63811284/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com