gpt4 book ai didi

java - 获取 Java 时区的区域规则时出现异常?

转载 作者:行者123 更新时间:2023-11-30 02:49:45 25 4
gpt4 key购买 nike

我在获取 Java 时区的 ZoneRules 时遇到了问题。我有一个 TimeZone 并且我正在尝试使用以下代码的 ZoneRules:

TimeZone tz = getTimeZone();
ZoneRules rules = ZoneRulesProvider.getRules(tz.toZoneId().getId(), true);

当时区是区域性时(例如“亚洲/迪拜”),它可以正常工作。但是当它是像 "GMT-07:00" 这样的偏移量时,它会抛出异常:

"ZoneRulesException: Unknown time-zone ID: GMT-07:00".

我打印了 ZoneRulesProvider.getAvailableZoneIds() 的所有输出,似乎没有像 "GMT-07:00" 这样的区域,但有一个区域 “等/GMT-7”

谁能解释一下为什么 TimeZone 类的 toZoneId 方法返回无效的 ZoneId 吗?将 TimeZone 转换为有效 ZoneId 的正确方法是什么。

最佳答案

您没有展示如何在 getTimeZone() 方法中创建 TimeZone。 TimeZone 有一个支持的 id 列表,可以按如下方式检索

    for (String zoneId : TimeZone.getAvailableIDs()) {
System.out.println(zoneId);
}

您会看到,它不显示 GMT-07:00,而仅显示“Etc/GMT-7”(等等)。看起来你的代码正在做

TimeZone timeZone = TimeZone.getTimeZone("GMT-07:00");

它创建一个带有自定义 ID 的时区。 https://docs.oracle.com/javase/8/docs/api/java/time/zone/ZoneRulesProvider.html提到以下内容:

Rules are looked up primarily by zone ID, as used by ZoneId. Only zone region IDs may be used, zone offset IDs are not used here.

要获取官方时区,请尝试以下代码

    TimeZone customTimeZone = TimeZone.getTimeZone("GMT-07:00");
TimeZone officialTimeZone = null;
for (String timeZoneId : TimeZone.getAvailableIDs()) {
if (TimeZone.getTimeZone(timeZoneId).hasSameRules(customTimeZone)){
officialTimeZone = TimeZone.getTimeZone(timeZoneId);
break;
}
}
ZoneRules zoneRules = ZoneRulesProvider.getRules(officialTimeZone.toZoneId().getId(), true);
System.out.println(zoneRules);

或者另一种选择

    TimeZone officialTimeZone = TimeZone.getTimeZone(TimeZone.getAvailableIDs(TimeZone.getTimeZone("GMT-07:00").getRawOffset())[0]);
ZoneRules zoneRules =ZoneRulesProvider.getRules(officialTimeZone.toZoneId().getId(), true);
System.out.println(zoneRules);

关于java - 获取 Java 时区的区域规则时出现异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39061314/

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