【发布时间】:2018-05-31 18:11:35
【问题描述】:
JVM 版本是 1.7。时区为 GMT+3,偏移 180 分钟。 1500411600000 对应于7/19/2017, 12:00:00 AM(我已经验证了这个online)。
我正在执行以下代码来调整Date 实例的时间:
final Calendar calendar = Calendar.getInstance(TimeZone.getTimeZone("UTC"));
Date date = new Date(1500411600000L);
calendar.setTime(date);
calendar.set(Calendar.HOUR_OF_DAY, 23);
calendar.set(Calendar.MINUTE, 59);
calendar.set(Calendar.SECOND, 59);
calendar.set(Calendar.MILLISECOND, 999);
date = calendar.getTime();
我希望date 变成7/19/2017, 11:59:59 PM,但我得到的是7/19/2017, 2:59:59 AM,而不是这个。 3 小时的差异 - 与我的时区与 UTC/GMT 的差异一样多,所以我想这里发生了一些未被注意到的转换。
您能帮我找到与时区无关的代码来调整日期时间吗?
【问题讨论】:
-
“验证”与您链接的网站,我得到一个完全不同的日期/时间:
7/18/2017, 11:00:00 PM -
试试jodatime joda.org/joda-time
-
您为什么要为早已过时的
Calendar类苦苦挣扎? Joda-Time 更好 (@ThomasEdwin),但在维护模式下,java.time, the modern Java date and time API 仍然更好,更易于使用。 -
它可能与
Calendar没有任何关系。更过时的Date类的toString方法会抓取你的JVM 的时区并将其时间呈现在这个时区,非常混乱。在Date中,您拥有正确且所需的时间点。见All about java.util.Date。 -
毫秒值 1500411600000 对应 2017-07-18T21:00:00Z 或 2017-07-19T00:00+03:00。
标签: java date calendar timezone-offset