簡體   English   中英

如何將java.sql.timestamp轉換為LocalDate(java8)java.time?

[英]How to convert java.sql.timestamp to LocalDate (java8) java.time?

在Java 8中,如何將Timestamp (在java.sql )轉換為LocalDate (在java.time )?

你可以做:

timeStamp.toLocalDateTime().toLocalDate();

請注意, 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美分

timeStamp.toLocalDateTime().toLocalDate();

一般來說 ,這是一個不好的解決方案 ,我什至不知道為什么他們將這種方法添加到JDK中,因為它通過使用系統時區進行隱式轉換而使事情變得非常混亂。 通常,當僅使用java8日期類時,程序員被迫指定時區,這是一件好事。

好的解決方案是

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

其中zoneId是要使用的時區,如果要使用系統時區或某些硬編碼的時區(例如ZoneOffset.UTC ,則通常為ZoneId.systemDefault()

一般方法應該是

  1. 使用直接相關的類來隨意使用新的java8日期類,例如,在我們的例子中, java.time.Instant與java.sql.Timestamp直接相關 ,即,它們之間不需要時區轉換。
  2. 使用此java8類中精心設計的方法來做正確的事情。 在我們的案例中, atZone(zoneId)明確表明我們正在進行轉換並為其使用了特定的時區。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM