我們在做項目時通常會遇到,日期類型顯示到前端如果不加處理顯示出來就是date的long類型的毫秒值,很顯然如果我們使用jstl标簽可以使用格式化日期類型的标簽,如
<fmt:formatDate value="${sk.startTime }" pattern="yyyy-MM-dd HH:mm:ss"/>相信你已經會使用,但顯示使用jstl向頁面傳值比較少,一般使用json資料傳輸,傳到回調函數進行解析,js日期類型有幾個格式化函數toLocalString()轉化為本地期時間格式,toDateLocalString()轉化為本地日期格式,toTimeLocalString()轉化為本地時間格式,toUTCString()函數寫錯還是寫對不知道,大概印象,轉化為國際日期時間格式,本地日期時間格式比較雜亂,我們不使用,國際化很明顯看着就不爽。那麼我們可以在後端定義統一日期格式。
如下代碼
package cn.tedu.ttms.product.web;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.JsonSerializer;
import com.fasterxml.jackson.databind.SerializerProvider;
//自定義類實作JsonSerializer類
public abstract class JsonDateTypeConvert extends JsonSerializer<Date> {
@Override
/**
* 參數arg0 Date類型我們需要處理
* 參數arg2 JsonGenerator類型攜帶我們格式化後的字元串
*/
public void serialize(Date arg0, JsonGenerator arg1, SerializerProvider arg2)
throws IOException, JsonProcessingException {
//定義一個日期樣式模闆
SimpleDateFormat simpleDateFormat=new SimpleDateFormat("yyyy/MM/dd");
//根據模闆格式化日期
String dateStr=simpleDateFormat.format(arg0);
//寫入JsonGenerator
arg1.writeString(dateStr);
}
}
寫好怎麼使用呢我們隻需要注解@JsonSerialize放到entity實體類裡變量的get方法上如下
package cn.tedu.ttms.product.entity;
import java.io.Serializable;
import java.util.Date;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import cn.tedu.ttms.product.web.JsonDateTypeConvert;
public class Project implements Serializable {
/**
*
*/
private static final long serialVersionUID = 1L;
/**項目的主鍵id*/
private int id;
/**項目名稱*/
private String name;
/**項目編号*/
private String code;
/**項目開始日期*/
private Date beginDate;
/**項目結束日期*/
private Date endDate;
/**項目狀态*/
private Integer valid;
/**項目備注*/
private String note;
/**記錄建立時間*/
private Date createdTime;
/**記錄修改時間*/
private Date modifiedTime;
/**記錄建立記錄的使用者資訊*/
private String createdUser;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
@JsonSerialize(using=JsonDateTypeConvert.class)
public Date getBeginDate() {
return beginDate;
}
public void setBeginDate(Date beginDate) {
this.beginDate = beginDate;
}
@JsonSerialize(using=JsonDateTypeConvert.class)
public Date getEndDate() {
return endDate;
}
public void setEndDate(Date endDate) {
this.endDate = endDate;
}
public Integer getValid() {
return valid;
}
public void setValid(Integer valid) {
this.valid = valid;
}
public String getNote() {
return note;
}
public void setNote(String note) {
this.note = note;
}
public Date getCreatedTime() {
return createdTime;
}
public void setCreatedTime(Date createdTime) {
this.createdTime = createdTime;
}
public Date getModifiedTime() {
return modifiedTime;
}
public void setModifiedTime(Date modifiedTime) {
this.modifiedTime = modifiedTime;
}
public String getCreatedUser() {
return createdUser;
}
public void setCreatedUser(String createdUser) {
this.createdUser = createdUser;
}
public static long getSerialversionuid() {
return serialVersionUID;
}
}
這樣的話就可以自由使用了傳回到前端是就會自動轉換了
目前端的日期字元串類型要送出後端時我們也需要轉換,我們可以通過Springmvc的統一日期類型轉化來解決,看代碼
package com.drs.controller.converter;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import org.springframework.core.convert.converter.Converter;
/**
* 将傳入的字元串轉化為java Data類型,不解釋,應該可以看懂
* @author lenovo
*
*/
public class CustomDateConverter implements Converter<String,Date>{
public Date convert(String source) {
//實作 将日期串轉成日期類型(格式是yyyy-MM-dd HH:mm:ss)
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
//轉成直接傳回
try {
return simpleDateFormat.parse(source);
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//如果參數綁定失敗傳回null
return null;
}
}
在springmvc.xml裡配置
<bean id="conversionService"
class="org.springframework.format.support.FormattingConversionServiceFactoryBean">
<property name="converters">
<list>
<bean class="com.drs.controller.converter.CustomDateConverter"/>
</list>
</property>
</bean>
OK!