Java - timestamp to local dateime & toInstant 在西元1970前,(timestamp 為負數時,則可能發生少兩天問題)

Java - timestamp to local dateime & toInstant 在西元1970前,(timestamp 為負數時,則可能發生少兩天問題)

好久沒寫文章了,

來分享一下,靈異事件好了,

在Java 不知何時,開始流行使用LocalDateTime ,可能是取各別的年、月、日、時、分、秒、毫秒容易的關係,或換時區簡單,而使用 LocalDateTime

但,詭異的問題來了,當你使用 timestamp 為負的(也就是西元1970年前的話). 

https://www.epochconverter.com/ 

查一下,timestamp 為零的話,應該是1970/01/01 

只是萬萬沒想到,使用 toInstant ,再用Instant to LocalDateTime 會有少一、兩天的問題

public Instant convert(

DateTime source) {    

return source.toInstant();  

}

逼不得已,找到一個解決是,不經過instant 轉成 LocalDateTime

Date date = new Date();
Timestamp timestamp2 = new Timestamp(date.getTime());
timestamp2.toLocalDateTime()

先 Date 取 getTime 再 toLocalDateTime 去轉,就可以避免西元1970前的失真問題。(不知道原因,反正就這樣解了)