今天,又被Java8的時間庫惡心到了,有同感的舉手...

作者:大話JAVA
www.toutiao.com/i6886042266360775181
在我所在公司和項目中,實際上時間庫應用不算太多,用到也是非常簡單的一些應用場景,一般情況下連Java8的時間庫都很少用到,今天為了寫個時間查詢,把我折騰夠嗆,是我沒有領悟到Java8時間庫的精髓嗎?還是我的功力不夠?一起來看看吧
需求:給定一個時間范圍:Date from, Date to,查詢出在這時間范圍內的記錄并按日期(年月日)分組,每條記錄的日期是包含日期和時間的,需要進行Truncate。如果只輸入一個日期,那么只統(tǒng)計該天的所有記錄,即0時0分0秒到23時59分59秒之間的記錄。
問題1:Java8中的LocalDate與Date互轉

Date和LocalDate互轉代碼
這個互轉的寫法應該是比較正統(tǒng)的吧,老鐵們應該沒有什么異議。我就想說都是一家的,這轉換咋就這么麻煩呢?正常不是應該這樣嗎:
LocalDate?ld;
Date?date = ld.toDate();或者:
Date?date;
LocalDate?ld = LocalDate(date);
LocalDate?ld = LocalDate.from(date);看看人家Joda-time:
// from Joda to JDK
DateTime dt =?new?DateTime();
Date?jdkDate = dt.toDate();
// from JDK to Joda
dt =?new?DateTime(jdkDate);// from Joda to JDK
DateTime dt =?new?DateTime();
Calendar jdkCal = dt.toCalendar(Locale.CHINESE);
// from JDK to Joda
dt =?new?DateTime(jdkCal);Java不愧為“渣瓦”,哎,不過興許還真是咱太菜吧,沒法領悟Java大佬的設計精髓
問題2:Calendar和Java8就是完全兩張皮
實現(xiàn)一個功能:給定一個Date,只截取年、月、日,并將其分解為兩個Date,一個是XXXX年XX月XX日 00:00:00和XXXX年XX月XX日 23:59:59

用Calendar實現(xiàn)的代碼
林哥直接把項目中的代碼片段截了個圖,各位看官是不是覺得非常累贅,可不是嘛,用Java8的時間庫也簡潔不到哪里去,寫法如下:

Java8時間庫的寫法
堂堂Java8的時間庫,連基本的截?。╰runcate)操作都木有,哎,說你什么好呢,“渣瓦”!
我們再看看Joda的“騷”操作:

Joda時間庫的寫法
簡潔的不得了哦
問題3:Date還不能直接轉LocalDate,這還有天理嗎?
private?LocalDate?dateToLocalDate(Date date)?{
????Instant instant = date.toInstant();
????return?LocalDate.from(instant);
}
居然報異常了
所以,Java8時間庫雖然進步很大,但在可用性上還真差點意思,Java程序員已經比較苦逼啦,能不能體量體量撒,期待后續(xù)版本會繼續(xù)迭代吧,讓我們拭目以待。

好文章,我在看

