Answers:
你可以做:
timeStamp.toLocalDateTime().toLocalDate();
请注意,这
timestamp.toLocalDateTime()
将使用Clock.systemDefaultZone()
时区进行转换。这可能是您想要的,也可能不是。
timestamp.toLocalDateTime()
方法将使用systemDefault时区进行转换。这可能是您想要的,也可能不是。
LocalDateTime
始终使用系统默认时区。这就是“本地”名称的含义。
可接受的答案并不理想,所以我决定加2美分
timeStamp.toLocalDateTime().toLocalDate();
一般而言,这是一个糟糕的解决方案,我什至不知道为什么他们将这种方法添加到JDK中,因为使用系统时区进行隐式转换会使事情真的很混乱。通常,当仅使用java8日期类时,程序员被迫指定时区,这是一件好事。
好的解决方案是
timestamp.toInstant().atZone(zoneId).toLocalDate()
其中zoneId是要使用的时区,如果要使用系统时区或某些硬编码的时区(例如ZoneOffset.UTC ),则通常为ZoneId.systemDefault()
一般方法应该是
我将略微扩展@assylias答案以考虑时区。至少有两种方法可以获取特定时区的LocalDateTime。
您可以将setDefault时区用于整个应用程序。应该在任何时间戳-> java.time转换之前调用它:
public static void main(String... args) {
TimeZone utcTimeZone = TimeZone.getTimeZone("UTC");
TimeZone.setDefault(utcTimeZone);
...
timestamp.toLocalDateTime().toLocalDate();
}
或者,您可以使用toInstant.atZone链:
timestamp.toInstant()
.atZone(ZoneId.of("UTC"))
.toLocalDate();