1. 程式人生 > >java.util.Date和mysql日期之間轉換

java.util.Date和mysql日期之間轉換

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的結構,但是是從根本上解決了問題。當你嘗試了各種註解的方式都不能解決的時候,可以用這個方法。