本文介绍了Java 8 时区 ZoneRulesException:未知时区 ID:EST的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

"EST" 是 TimeZone.getAvailableIDs() 中的时区 ID 之一;

"EST" is one of the timeZone id from TimeZone.getAvailableIDs();

但是

TimeZone.getAvailableIDs();  // contains EST
ZoneId.of("EST")

java.time.zone.ZoneRulesException:未知时区 ID:EST

java.time.zone.ZoneRulesException: Unknown time-zone ID: EST

推荐答案

您正在混合使用新旧 API.

You are mixing old and new API's.

TimeZone.getAvailableIDs() 返回 TimeZone.getTimeZone(String ID) 可以解析.

ZoneId.getAvailableZoneIds() 返回 ZoneId.of(String zoneId) 可以解析.

如果你比较 2 的结果,你会看到:

If you compare the results of the 2, you will see:

public static void main(String[] args) {
    Set<String> timeZones = Set.of(TimeZone.getAvailableIDs());
    Set<String> zoneIds = ZoneId.getAvailableZoneIds();
    System.out.println("Extra TimeZone's: " + diff(timeZones, zoneIds));
    System.out.println("Extra ZoneId's: " + diff(zoneIds, timeZones));
}
static Set<String> diff(Set<String> a, Set<String> b) {
    Set<String> diff = new TreeSet<>(a);
    diff.removeAll(b);
    return diff;
}

输出 (jdk-11.0.1)

Extra TimeZone's: [ACT, AET, AGT, ART, AST, BET, BST, CAT, CNT, CST, CTT, EAT, ECT, EST, HST, IET, IST, JST, MIT, MST, NET, NST, PLT, PNT, PRT, PST, SST, VST]
Extra ZoneId's: []

如您所见,ZoneId.getAvailableZoneIds() 并未声称支持 EST,只有 TimeZone.getAvailableIDs() 支持.

As you can see, ZoneId.getAvailableZoneIds() does not claim to support EST, only TimeZone.getAvailableIDs() does.

这篇关于Java 8 时区 ZoneRulesException:未知时区 ID:EST的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

10-10 09:15