如何将java.sql.timestamp转换为LocalDate (java8) java.time?

2022-08-31 07:00:11

在Java 8中,如何将(in)转换为(in)?Timestampjava.sqlLocalDatejava.time


答案 1

您可以执行以下操作:

timeStamp.toLocalDateTime().toLocalDate();

请注意,将使用 Clock.systemDefaultZone() 时区进行转换。这可能是也可能不是你想要的。timestamp.toLocalDateTime()


答案 2

接受的答案并不理想,所以我决定添加我的2美分

timeStamp.toLocalDateTime().toLocalDate();

总的来说,这是一个糟糕的解决方案,我甚至不确定为什么他们将此方法添加到JDK中,因为它通过使用系统时区进行隐式转换会使事情变得非常混乱。通常,当仅使用java8日期类时,程序员被迫指定一个时区,这是一件好事。

好的解决方案是

timestamp.toInstant().atZone(zoneId).toLocalDate()

其中 zoneId 是您要使用的时区,如果您想使用系统时区,它通常是 ZoneId.systemDefault() 或一些硬编码的时区,如 ZoneOffset.UTC

一般方法应该是

  1. 使用直接相关的类来释放新的java8日期类,例如,在我们的例子中,java.time.Instant与java.sql.Timestamp直接相关,即它们之间不需要时区转换。
  2. 使用此 java8 类中精心设计的方法执行正确的操作。在我们的例子中,atZone(zoneId)明确表示我们正在进行转换并为其使用特定的时区。