【发布时间】:2023-03-11 11:39:01
【问题描述】:
谁能帮忙解决以下问题?
-
我的操作系统是最新的 windows 10,它的时区是
(UTC+0300) Istanbul(在土耳其的最后规定 - 2016 年 9 月 7 日之后,夏令时已被删除,时区设置为+0300) -
我使用的是 1.8.0_131 的最新 JDK。此 JDK 的 Tzdata 版本是 tzdata2017a,其中包括土耳其的时区更改。
这是我在 main 方法中实现的应用程序的一小部分:
import java.util.Date;
import java.util.TimeZone;
public class TestMain {
public static void main(String[] args) {
String timeZoneStr = "Asia/Istanbul";
TimeZone timeZone = TimeZone.getTimeZone(timeZoneStr);
Date localDate = new Date();
System.out.println(localDate);
localDate.setTime(155631515L);
System.out.println(localDate);
System.out.println(getUTCFromLocal(localDate, timeZone));
}
public static Date getUTCFromLocal(Date localDate, TimeZone localTimeZone) {
return new Date(localDate.getTime()-localTimeZone.getOffset(localDate.getTime()));
}
}
代码的结果是:
2017 年 5 月 21 日星期日 15:19:48 EET
1970 年 1 月 2 日星期五 21:13:51 EET
1970 年 1 月 2 日星期五 19:13:51 EET
根据最新的时区更新,输出的最后一行应该是“Fri Jan 02 18:13:51 EET 1970”,而不是“Fri Jan 02 19:13:51 EET 1970”。
除此之外,当我创建新的日期对象 (new java.util.Date()) 时,该对象中的信息似乎正确且时区在 +0300,但如果我使用 setTime 的 setTime 方法 @ 对象时区信息更改为+0200。
当使用new java.util.Date()创建日期对象时:
当localDate.setTime(155631515L)方法执行时:
我也在其他 JDK 版本上重现了同样的问题。
【问题讨论】:
标签: java java-8 timezone java-7 timezone-offset