總所周知,localdatetime是jdk8 推出的關於日期計算非常方便地一個類,一旦開始用上就欲罷不能。但是在使用的時候,坑還是蠻多的。
一、mybatis與LocalDatetime
如果直接將實體里面所有的Date類型換成LocalDatetime之后,運行程序是會報異常的。此時,可以加入以下依賴:
-
<dependency>
-
<groupId>org.mybatis</groupId>
-
<artifactId>mybatis-typehandlers-jsr310</artifactId>
-
<version>1.0.2</version>
-
</dependency>
在mybatis3,.4以上,加入該依賴即可生效。mapper等跟之前一樣無需修改。
二、LocalDatetime與json
此處localdatetime轉json用的是jackson,其他轉json的工具未測
待轉類:
-
public class MyTest {
-
-
private LocalDateTime now;
-
-
public LocalDateTime getNow() {
-
return now;
-
}
-
-
public void setNow(LocalDateTime now) {
-
this.now = now;
-
}
-
}
將該類實例直接轉成json之后輸出
-
{
-
"now" : {
-
"dayOfMonth" : 29,
-
"dayOfWeek" : "FRIDAY",
-
"dayOfYear" : 363,
-
"hour" : 23,
-
"minute" : 45,
-
"month" : "DECEMBER",
-
"monthValue" : 12,
-
"nano" : 128000000,
-
"second" : 10,
-
"year" : 2017,
-
"chronology" : {
-
"id" : "ISO",
-
"calendarType" : "iso8601"
-
}
-
}
-
}
這樣一個時間顯得有點瑣碎。我們一般跟前端交互的時候,用的都是形如 yyyyMMdd HH:mm:ss 這樣的格式。所以此時就需要轉下格式
-
{
-
"now" : "2017-12-29 23:50:32"
-
}
這是時候,就需要使用到注解
作為接受參數時,使用
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
作為格式化輸出時,需要使用
@JsonSerialize(using = LocalDateTimeSerializer.class)
三 奇怪的時間
有時候,使用json序列化之后的時間,會發現比傳參的時間差距有幾個小時.一開始感覺很奇怪,后來發現json序列化的時候指定時區為GMT+8之后,就不會出現該現象.