“ EST”是TimeZone.getAvailableIDs();中的timeZone ID之一。
但是
C:\Users\pla>netstat -qfa | findstr host
TCP 10.0.0.1:##87 host.abc.nt:4096 ESTABLISHED
java.time.zone.ZoneRulesException:未知时区ID:EST
答案 0 :(得分:5)
三个字母的时区ID
为了与JDK 1.1.x兼容,还支持其他三个字母的时区ID(例如“ PST”,“ CTT”,“ AST”)。但是,不赞成使用它们,因为通常在多个时区使用相同的缩写(例如,“ CST”可以是美国的“ Central Standard Time”和“ China Standard Time”),并且Java平台只能识别以下一种他们。
ZoneId
与TimeZone
不同,并删除了这些有问题的时区。
如果这就是您的意思,请改用America/New_York
。
答案 1 :(得分:2)
您正在混合新旧API。
TimeZone.getAvailableIDs()
返回TimeZone.getTimeZone(String ID)
可以解析的时区ID。
ZoneId.getAvailableZoneIds()
返回ZoneId.of(String zoneId)
可以解析的区域ID。
如果比较2的结果,则会看到:
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()
支持。
答案 2 :(得分:2)
尝试一下:
ZoneId.of("EST", ZoneId.SHORT_IDS);
说明:ZoneID.SHORT_IDS将已弃用的3个字母的代码映射为常规的3个字母的代码,出于某种原因,必须明确指定它才能生效。
在JDK javadoc中:“在TimeZone中已不再使用短区域ID”。