我们在做项目时通常会遇到,日期类型显示到前端如果不加处理显示出来就是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!