相信不少人遇到過和我同樣的問題,在使用SSH直接向前臺頁面返回一個包含時間類型(java.util.Date、java.sql.Timestamp)的對象時,時間字段並非咱們所指望的格式,而是一串不知道什麼值的字符串,這個數值就是某個時間點相對於格林威治1970年1月1號0時0分0秒所差的毫秒數。有的人拿到這個值可能會以爲秒明奇妙,有的人可能會選擇在js裏頭處理後再進行顯示,這裏說一種針對這種狀況的簡單處理方法,以及我爲何會這樣作,歡迎你們指正。java
我有一個PoJo類包含不少字段,operateTime字段的含義是記錄用戶的當前的操做時間:mysql
public class PoJo implements Serializable { private static final long serialVersionUID = -975427038149242694L; private Date operateTime; ... public Date getOperateTime() { return operateTime; } public void setOperateTime(Date operateTime) { this.operateTime = operateTime; } ... @Override public String toString() { return ...; } }
將它存入MySQL中,operateTime字段對應的mysql類型爲datetime,當咱們向數據庫插入數據時能夠看到數據庫中存儲的確實是「YYYY-MM-DD hh:mm:ss」格式時間,而後咱們在Controller層進行了若干操做並返回PoJo對象,前臺獲得operateTime 字段的值爲"1467818920069",並非咱們所指望的"YYYY-MM-DD hh:mm:ss"。有人說對這個字段進行處理後變成一個格式化的字符串返回給前臺,可是這個對象包含不少字段,若是須要單獨去處理一個字段,返回類型就變成一個Map,對象中其餘字段須要拉出來再放入Map中返回。sql
@RequestMapping(...) @ResponseBody public PoJo operate(){ logger.debug("----------xxxxxxx---------"); ... return PoJo; }
這時候咱們將operateTime字段變爲String試試,插入時MySQL語句多是這樣的:數據庫
insert into pojo (operate_time) values (now());
後臺返前臺顯示「YYYY-MM-DD hh:mm:ss.fff」格式的時間字符串,多了小數秒,仍是不符合要求。這時候將數據庫operateTime字段變爲varchar類型就能夠正常顯示了。json
說了這麼多,其實就是String+varchar的形式就不會出現上文所描述的格式問題。。。對於記錄當前時間的操做直接使用now()函數,省去了後臺代碼生成一個Date對象,而後再轉爲YYYY-MM-DD hh:mm:ss「字符串存數據庫的操做。app
橙子先生的評論說使用fastjson的JSON.toString(),測試以後發現返給前臺依然會出現小數秒".0",因爲後臺向前臺返的是個json字符串,因此爲了方便處理,必須在處理前轉爲json對象。還有一種方式是日期字段使用datetime類型,Entity類使用String類型,SQL語句使用mysql的date_format()函數將日期轉化爲本身想要的字符串格式。ide