在JavaWeb項目中愉快的使用Java8日期API

在JavaWeb項目中愉快的使用Java8日期API

在Java8發佈之前繁瑣的日期API使我們不得不借助第三方的Jar包Joda來對日期進行操作,而Java8的日期java.time包則是由Joda的作者來進行操刀,我相信不管是因為Java8性能的提升、函數式編程、流、新的日期API的引入、還是開發者對新興技術的熱情擁抱,我們的新項目基本都是基於Java8開發了,而且因為Java良好的向後兼容性,我們老的項目升級為Java8也並非難事。

為了兼容歷史版本,新的日期API沒有選擇直接在舊的Date上直接動刀,而是選擇增加了LocalDate、LocalTime、LocalDateTime等新的類,並且提供了Date和LocalDateTime的互轉。

LocalDateTime轉為Date

 //獲取當前時間 LocalDateTime now = LocalDateTime.now(); //獲取當前系統所在的時區 ZoneId zoneId = ZoneId.systemDefault(); //獲取該時間點在該時區上的時間日期信息 ZonedDateTime zonedDateTime = now.atZone(zoneId); Date nowDate = Date.from(zonedDateTime.toInstant());

Date轉為LocalDateTime

Date date = new Date();Instant instant = date.toInstant();ZoneId zoneId = ZoneId.systemDefault();

關於時間加減LocalDateTime提供了plus和minus的各種方法,需要的時候根據提示找對應的API即可。

時間格式化

LocalDateTime now = LocalDateTime.now();DateTimeFormatter df = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:ss:mm");String format = df.format(now);

字符串解析

DateTimeFormatter df = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:ss:mm");LocalDateTime date = LocalDateTime.from(df.parse("2017-10-11 22:22:22"));

SpringMVC

Spring4版本之後默認對JSR310提供支持,只需要在日期字段上加註解

@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")

Mybatis

mybatis中數據庫字段對應的實體類時間也是默認使用Date類型不做改變,而是提供了針對jsr310的一個插件

org.mybatismybatis-typehandlers-jsr310xxx

引入包之後不需要做任何改變,實體類為LocalDateTime等的字段就可以識別

SpringDataJPA

Spring的做法跟Mybatis的類似,使用一個Jsr310JpaConverters類來做轉換,SpringBoot中只要在啟動類上加註解即可:

@EntityScan(basePackageClasses = {Application.class,Jsr310JpaConverters.class})


分享到:


相關文章: