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前的失真問題。(不知道原因,反正就這樣解了)