? ? ? ? 在Java8發(fā)布之前繁瑣的日期API使我們不得不借助第三方的Jar包Joda來(lái)對(duì)日期進(jìn)行操作,而Java8的日期java.time包則是由Joda的作者來(lái)進(jìn)行操刀遭京,我相信不管是因?yàn)镴ava8性能的提升胃惜、函數(shù)式編程哪雕、流、新的日期API的引入利虫、還是開(kāi)發(fā)者對(duì)新興技術(shù)的熱情擁抱堡僻,我們的新項(xiàng)目基本都是基于Java8開(kāi)發(fā)了,而且因?yàn)镴ava良好的向后兼容性苦始,我們老的項(xiàng)目升級(jí)為Java8也并非難事。
? ? ? ? 為了兼容歷史版本,新的日期API沒(méi)有選擇直接在舊的Date上直接動(dòng)刀蹄溉,而是選擇增加了LocalDate、LocalTime役电、LocalDateTime等新的類棉胀,并且提供了Date和LocalDateTime的互轉(zhuǎn)
LocalDateTime轉(zhuǎn)為Date
//獲取當(dāng)前時(shí)間
LocalDateTime now = LocalDateTime.now();
//獲取當(dāng)前系統(tǒng)所在的時(shí)區(qū)
ZoneId zoneId = ZoneId.systemDefault();
//獲取該時(shí)間點(diǎn)在該時(shí)區(qū)上的時(shí)間日期信息
ZonedDateTime zonedDateTime = now.atZone(zoneId);
Date nowDate = Date.from(zonedDateTime.toInstant());
Date轉(zhuǎn)為L(zhǎng)ocalDateTime
Date date = new Date();
Instant instant = date.toInstant();
ZoneId zoneId = ZoneId.systemDefault();
關(guān)于時(shí)間加減LocalDateTime提供了plus和minus的各種方法冀膝,需要的時(shí)候根據(jù)提示找對(duì)應(yīng)的API即可霎挟。
時(shí)間格式化
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版本之后默認(rèn)對(duì)JSR310提供支持,只需要在日期字段上加注解
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
Mybatis
mybatis中數(shù)據(jù)庫(kù)字段對(duì)應(yīng)的實(shí)體類時(shí)間也是默認(rèn)使用Date類型不做改變赐纱,而是提供了針對(duì)jsr310的一個(gè)插件
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-typehandlers-jsr310</artifactId>
<version>xxx</version>
</dependency>
引入包之后不需要做任何改變熬北,實(shí)體類為L(zhǎng)ocalDateTime等的字段就可以識(shí)別
SpringDataJPA
Spring的做法跟Mybatis的類似,使用一個(gè)Jsr310JpaConverters類來(lái)做轉(zhuǎn)換讶隐,SpringBoot中只要在啟動(dòng)類上加注解即可:
@EntityScan(basePackageClasses = {Application.class,Jsr310JpaConverters.class})