如何根据Locale将时区缩写(如PST)转换为标准时区ID?
问题描述
Java标准库或JodaTime等工具包中是否存在方法,可将PST等时区缩写转换为符合Locale的时区全名?例如,PST可能对应Asia/Manila、America/Los_Angeles、America/Vancouver等,具体取决于用户所在地区(菲律宾、美国、加拿大等)。我了解JDK或JodaTime中提供getAvailableIDs方法,但该方法仅返回完整的时区列表,无法指导用户在仅输入PST时选择合适的时区。理想情况下,应有工具可借助Locale选择最匹配或最相关的时区。
解决方案
经过验证,可通过Java 8+的DateTimeFormatter结合Locale来实现基于地区的时区缩写解析,代码示例如下:
ZoneId zone = ZoneId.from(DateTimeFormatter.ofPattern("z", Locale.US).parse("MST")); System.out.println(zone.getId()); zone = ZoneId.from(DateTimeFormatter.ofPattern("z", Locale.CANADA).parse("MST")); System.out.println(zone.getId());
运行结果:
America/Denver America/Edmonton
该方案并非完美,例如使用Locale.CHINA解析CST时仍返回America/Chicago而非中国时区,但相比直接猜测歧义时区,已接近需求。
内容的提问来源于stack exchange,提问作者John
相关产品推荐
相关产品推荐

