在 Java8中,如何将 Timestamp(在 java.sql中)转换为 LocalDate(在 java.time中) ?
Timestamp
java.sql
LocalDate
java.time
你可以这样做:
timeStamp.toLocalDateTime().toLocalDate();
请注意,timestamp.toLocalDateTime() 将使用 Clock.systemDefaultZone()时区进行转换。这可能是或可能不是你想要的。
timestamp.toLocalDateTime()
Clock.systemDefaultZone()
我稍微扩展一下@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();
接受的答案并不理想,所以我决定加上我的2分钱
一般来说 是一个糟糕的解决方案,我甚至不确定他们为什么要将这个方法添加到 JDK 中,因为它使用系统时区执行隐式转换会使事情变得非常混乱。通常,当只使用 java8日期类时,程序员被迫指定一个时区,这是一件好事。
好的解决办法是
timestamp.toInstant().atZone(zoneId).toLocalDate()
其中 ZoneId是您想要使用的时区,如果您想要使用系统时区,通常是 ZoneId.systemDefault ()或一些硬编码的时区,如 协调世界时区域偏移量
一般的方法应该是