java 8 instant with time 00:00:00 gives time 02:00:00 after conversion to util,Date
我在将java.time.Instant转换为java.util.Date时遇到问题:
1 2
| System. out. println(item. getStart()); // getStart returns instant
System. out. println(Date. from(item. getStart())); |
给出输出:
1 2
| 2017-08-29T00:00:00Z
Tue Aug 29 02:00:00 CEST 2017 |
为什么在约会时间是02:00:00? 以及如何按时间00:00:00进行转换
-
两者都对应于同一时刻。但Instant以UTC格式打印,Date以JVM默认时区打印。您没有转换Date对象,因为它没有格式。但是,如果要转换为String,请查看stackoverflow.com/q/4216745/7605325
-
您所观察到的是预期和正确的行为。您的Date保持相同的时间点。 System.out.println()隐式调用Date.toString(),后者又将时间转换为中欧时区的字符串,从而产生您看到的输出。
-
"以及如何按时间00:00:00进行转换?"你已经有一个时间00:00:00 UTC的Date。不要让自己从toString()的输出中愚弄。
-
作为Ole V.V.评论说,Date::toString谎言。该方法应用JVM的当前默认时区,这意味着当Date始终为UTC时,该区域将分配给Date对象。避免这个可怕的老班级的众多原因之一。请仅使用java.time类。
-
正如雨果评论的那样,午夜UTC与欧洲中部的凌晨2点相同。如果雷克雅未在冰岛观看他们的钟表罢工的人在法国巴黎的电话中对他们的朋友说:"哇,看看时间",巴黎人回应"Mais oui,凌晨2点"。
在2017-08-29T00:00:00Z中,Z表示Zulu,表示UTC+0。
所以它描述的时间与Tue Aug 29 02:00:00 CEST 2017 UTC+2完全相同
它被打印为CEST,因为toString()方法的默认实现使用默认时区。
您可以尝试使用Java8 LocalDate。 它没有任何时间信息。
如何进行转换,你可以在这里看到:https://stackoverflow.com/a/35187046/1199731