Joh*_*non 6 java time timezone java-time
我正在尝试迁移旧库以使用"新"Java时间API并在一点上挣扎.
我现在开发了一段时间用于处理银行业图表的应用程序.所以你有一个连续的价格流,你将它们聚合1天蜡烛(例如),开放,高,低和收盘.
主要问题在于图表只有在市场开放时才需要显示蜡烛.对于外汇,这意味着从纽约周日17:00到纽约周五17:00.所以这一天从纽约时间17:00开始,即使你住在日内瓦,你的蜡烛也需要反映出来.
我使用旧的"Java Time"API执行此操作的方法是创建自己的时区(请参阅下面的代码)
public class RelativeTimezone extends TimeZone {
private final TimeZone zone;
private final int addedTime;
public RelativeTimezone(String id, TimeZone zone, int addedTime) {
this.zone = zone;
this.addedTime = addedTime;
setID(id);
}
public final int getAddedTime() {
return this.addedTime;
}
@Override
public int getRawOffset() {
return this.zone.getRawOffset() + this.addedTime;
}
@Override
public void setRawOffset(int offsetMillis) {
this.zone.setRawOffset(offsetMillis - this.addedTime);
}
// Other overriding methods that simply forward to "this.zone"
// ...
}
Run Code Online (Sandbox Code Playgroud)
致电:
TimeZone forexTimezone = new RelativeTimezone("NY+7",
TimeZone.getTimeZone("America/New_York"), 7 * 3_600_000L)
Run Code Online (Sandbox Code Playgroud)
我得到一个时区,其中星期一午夜实际上是周日17:00 NY.这有助于所有计算知道它是哪一天.我会自动正确地获得夏令时.
我没有找到一种方法来使用"新"时间API做同样的事情.这些类要么是最终的,要么是包保护的,所以我无法创建自己的TimeZone.我试图找到所有地方,如果有人在过去做了类似的事情,但没有找到任何东西.
我发现我可以创建一个新的ZoneRules来创建我自己的ZoneId,但不可能使用初始的ZoneRules(对于NY)来获取初始参数来提供它(为什么它不是一个我可以"装饰"的界面).我看到的唯一解决方案是使用"reflexion"来读取NY ZoneRules字段.
有没有办法干净地做到这一点?
当然,只要有"旧"API,我仍然可以使用它,但需要多长时间.