希望能够创建自特定时区偏移的自定义时区(但要遵守夏时制转换)。例如,希望能够指出:
ZoneId.of("America/New_York+7")
根据夏令时+ 7小时,上述区域将遵守EST或EDT。此申请与外汇市场的开始/结束时间(纽约时间下午5点)相关。
ZoneId中不允许使用上述偏移格式,因为ZoneId仅允许从UTC偏移。
我实现了一个可生成自定义ZoneRules
的类,但随后ZoneRegion
构造函数中,ZoneId的子类不是公共的。 ZoneRegion具有以下不可用的构造函数:
ZoneRegion(String name, ZoneRules rules)
所以问题是,除了不使用java.time库以外,还有什么方法可以使用DST规则来获取自定义区域的行为?另外,有人知道如何使用Joda日期/时间库吗?
附录
请注意,由于ZoneId中的以下代码,因此无法创建ZoneId的子类(坦率地说,除非有某些我无法理解的安全原因,否则这似乎是一个非常糟糕的主意):
/**
* Constructor only accessible within the package.
*/
ZoneId() {
if (getClass() != ZoneOffset.class && getClass() != ZoneRegion.class) {
throw new AssertionError("Invalid subclass");
}
}