Java ZonedDateTime提供了错误的UTC偏移值
我使用Java中的ZonedDateTime库从标准时区列表(Olson时区数据库)中检索任何时区的UTC偏移量 这是我的简单代码Java ZonedDateTime提供了错误的UTC偏移值,java,datetime,timezone,timezone-offset,zoneddatetime,Java,Datetime,Timezone,Timezone Offset,Zoneddatetime,我使用Java中的ZonedDateTime库从标准时区列表(Olson时区数据库)中检索任何时区的UTC偏移量 这是我的简单代码 import java.time.ZoneId; import java.time.ZonedDateTime; public class HelloWorld{ public static void main(String []args){ displayUtcOffset("Europe/Istanbul"); dis
import java.time.ZoneId;
import java.time.ZonedDateTime;
public class HelloWorld{
public static void main(String []args){
displayUtcOffset("Europe/Istanbul");
displayUtcOffset("America/Caracas");
}
public static void displayUtcOffset(String olsonId){
ZonedDateTime zonedDateTime = ZonedDateTime.now(ZoneId.of(olsonId));
float utcOffset = zonedDateTime.getOffset().getTotalSeconds()/3600f;
System.out.println("For "+olsonId+", UTC"+utcOffset);
}
}
它们的输出是
For Europe/Istanbul, UTC2.0
For America/Caracas, UTC-4.5
正如我们所见,加拉加斯的UTC偏移量是正确的,但伊斯坦布尔的UTC偏移量实际上是+3,但它给出的输出为+2,这是不正确的。
这个java库的工作方式有什么变化吗?或者是否有更可靠的库用于将olson Id转换为UTC偏移量
注意:您是否考虑了夏令时?例如,在夏季检查时间时,如下所示:
public static void displayUtcOffset(String olsonId){
ZonedDateTime zonedDateTime = ZonedDateTime.of(2017, 7, 15, 1, 1, 11, 1, ZoneId.of(olsonId));
float utcOffset = zonedDateTime.getOffset().getTotalSeconds()/3600f;
System.out.println("For "+olsonId+", UTC"+utcOffset);
}
输出与您期望的一致:
For Europe/Istanbul, UTC3.0
For America/Caracas, UTC-4.5
你考虑过夏令时了吗?例如,在夏季检查时间时,如下所示:
public static void displayUtcOffset(String olsonId){
ZonedDateTime zonedDateTime = ZonedDateTime.of(2017, 7, 15, 1, 1, 11, 1, ZoneId.of(olsonId));
float utcOffset = zonedDateTime.getOffset().getTotalSeconds()/3600f;
System.out.println("For "+olsonId+", UTC"+utcOffset);
}
输出与您期望的一致:
For Europe/Istanbul, UTC3.0
For America/Caracas, UTC-4.5
土耳其最近停止观察DST,您的时区数据库可能不是最新的 综上所述,tzdata2016g版本中引入了此更改。在撰写本文时,JDK的最新版本是更新111/112,因此没有适用于土耳其的正确时区
您可以等待JDK的下一次更新,该更新可能包含更正,也可以使用安装最新的时区数据库。土耳其最近停止观察DST,并且您的时区数据库可能不是最新的 综上所述,tzdata2016g版本中引入了此更改。在撰写本文时,JDK的最新版本是更新111/112,因此没有适用于土耳其的正确时区
您可以等待JDK的下一次更新,该更新可能包含更正,也可以使用安装最新的时区数据库。这就是问题所在。即使伊斯坦布尔没有夏令时,这个图书馆仍在考虑。有办法解决这个问题吗?或者我需要切换到另一个库吗?哦,我不知道Turkey通过了DST(对他们有好处!)。那么说明已经给出了,这就是问题所在。即使伊斯坦布尔没有夏令时,这个图书馆仍在考虑。有办法解决这个问题吗?或者我需要切换到另一个库吗?哦,我不知道Turkey通过了DST(对他们有好处!)。那么说明已经给出了