java.util.Date和mysql日期之間轉換
阿新 • • 發佈:2019-02-03
Pojo裡面用的是java.util.Date;MYSQL裡面用的是datetime。因為表單提交所有資料都是以字串的形式傳輸(如果說錯請大神指正),所以在後臺接收到前臺傳來的日期字串是要轉換一下。
這樣就能正確插入資料庫中。/** * 字串轉換成日期 * @param str * @return date */ public static Date StrToDate(String str) { SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); Date date = null; try { date = format.parse(str); } catch (ParseException e) { e.printStackTrace(); } return date; }
但是當從資料庫中取出來的時候,顯示總是不正常的。控制檯輸出是這樣子的:Mon Feb 13 18:10:00 CST 2017,瀏覽器輸出是這樣子的:1486980600000
通過
/** * 字串轉換成日期 * @param str * @return date */ public static Date StrToDate(String str) { SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); Date date = null; try { date = format.parse(str); } catch (ParseException e) { e.printStackTrace(); } return date; }
轉碼時候,控制檯輸出是這樣子的:2017-02-13 18:10:00,然而瀏覽器輸出還是這樣子的:1486980600000
因為整體的轉換都是用阿里的fastjson,所以覺得它應該有專門針對Date型別的封裝。果然,最後在Pojo的Date上加上@JSONField (format="yyyy-MM-dd HH:mm:ss") 註解,比如:
@JSONField (format="yyyy-MM-dd HH:mm:ss") //日期格式可以自己設定
private Date birthday;
前臺顯示了我想要的樣子:2017-02-13 18:10:00。
還有很多的序列化我沒看懂。有興趣的可以看一下。
在往後的開發中,我還遇到了一個問題,就是springMVC前臺傳來的Date型別資料,由於與POJO裡型別不匹配,所以頁面直接報400。奇怪得不行。最後是直接對POJO的Date欄位進行改造!具體改造如下:
public void setBegintime(begintime) {
this.begintime =begintime;
}
改成:
public void setBegintime(String begintime) {
if("".equels(begintime) || begintime == null) {
this.begintime = "";
}
this.begintime = DateUtils.StrToDate(begintime);}
引數型別改成String型別,並使用上面說的日期轉換工具進行轉換。改造setter方法只能解決後臺接收引數400問題。但是前臺讀取資料庫Date欄位時,還是不能正常顯示。
所以還需要改造一getter。也是直接對POJO的對應欄位進行改造:
public Date getBegintime() {
return begintime;
}
改成:
public String getBegintime() {
if("".equels(begintime) || begintime == null) {
return "";
}
return DateUtils.DateToStr(begintime);}
返回值型別改成String型別,並使用Date工具類進行轉換一下。完美解決。
個人覺得這雖然是破壞了POJO的結構,但是是從根本上解決了問題。當你嘗試了各種註解的方式都不能解決的時候,可以用這個方法。