我正在使用Java中的ZonedDateTime库来检索标准时区列表(Olson时区数据库)中任何时区的UTC偏移量。
这是我的简单代码。
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偏移量?
注意:olson Ids List
最佳答案
您是否考虑了夏令时?例如,当您检查夏季时间时,如下所示:
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