java - 如何在给定自定义 ZoneRules 的情况下创建 ZoneId
问题描述
希望能够创建从特定区域偏移的自定义时区(但要观察夏令时转换)。例如希望能够表明:
ZoneId.of("America/New_York+7")
上述区域将观察 EST 或 EDT,具体取决于夏令时 + 7 小时。此申请与外汇市场开始/结束(纽约时间下午 5 点)有关。
ZoneId 中不允许使用上述偏移格式,因为 ZoneId 仅允许从 UTC 偏移。
我已经实现了一个生成 custom 的类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");
}
}
解决方案
推荐阅读
- c# - 注册通用 Autofac 工厂
- xamarin.forms - Xamarin.Forms .Net 标准项目上的 NLog
- css - 如何在 iframe 中为 Web 资源设置域
- javascript - 点击功能上的jquery不适用于引导程序
- android - 文本不会实时更改
- jenkins - 如果 Jenkins 中的专用节点被占用,则在另一个节点上运行测试
- c# - 在 WinForms 中使用 MVP 时如何处理 Presenter?
- webpack - Webpack:可以将摇树应用于预处理动态导入吗?
- javascript - 动态调用路由器功能
- facebook - Facebook 广告不起作用离子 1