一:使用注解的方式
@JsonFormat注解
该注解加在实体类中的日期类型上,可以将返回的Json字符串中的时间戳转换为具体时间
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") private Date updateTime;
我们通过使用@JsonFormat可以很好的解决:后台到前台时间格式保持一致的问题
声明:关于@JsonFormat的使用,一定要导入正确完整的包。
使用maven引入@JsonFormat所需要的jar包,我贴一下我这里的pom文件的依赖
<!--JsonFormat--> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-annotations</artifactId> <version>2.8.8</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.8.8</version> </dependency> <dependency> <groupId>org.codehaus.jackson</groupId> <artifactId>jackson-mapper-asl</artifactId> <version>1.9.13</version> </dependency>
这里解释一下:@JsonFormat(pattern="yyyy-MM-dd",timezone = "GMT+8")
pattern:是你需要转换的时间日期的格式
timezone:是时间设置为东八区,避免时间在转换中有误差
提示:@JsonFormat注解可以在属性的上方,同样可以在属性对应的get方法上,两种方式没有区别.
如果既需要取数据到前台,也需要前台数据传到后台,都需要进行时间格式的转换,可以同时使用@DateTimeFormat和@JsonFormat注解
注解@DateTimeFormat
1.@DateTimeFormat的使用和@jsonFormat差不多
<!-- joda-time --> <dependency> <groupId>joda-time</groupId> <artifactId>joda-time</artifactId> <version>2.3</version> </dependency>
2.在controller层我们使用spring mvc 表单自动封装映射对象时,我们在对应的接收前台数据的对象的属性上加@DateTimeFormat
@DateTimeFormat(pattern = "yyyy-MM-dd")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
private Date symstarttime;
@DateTimeFormat(pattern = "yyyy-MM-dd")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
private Date symendtime;
3.通过上面两个步骤之后,我们就可以获取一个符合自定义格式的时间格式存储到数据库了
总结:
注解@JsonFormat主要是后台到前台的时间格式的转换
注解@DateTimeFormat主要是前后到后台的时间格式的转换
二:创建一个日期转换类实现Converter接口
需求:
前端传入字符串类型日期转化成java中的Date类型,存入数据库中;将数据库中的日期类型通过jstl标签在前端页面转换成字符串类型。
步骤:
1.创建一个日期转换类实现Converter接口,将String类型的日期转换成java中的Date类型,如果数据库中的字段设置为date,则SimpleDateFormat中设置格式为(yyyy-MM-dd),如果为datetime,则SimpleDateFormat中设置格式为(yyyy-MM-dd HH:mm:ss).
public class CustomDateConverter implements Converter<String, Date>{ @Override public Date convert(String source) { // 将日期串转换成日期格式(格式是yyyy-MM-dd) SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd"); try { //返回上述格式的Date类型对象 return simpleDateFormat.parse(source); } catch (ParseException e) { // TODO Auto-generated catch block e.printStackTrace(); } return null; } }
2.将自定义的转换类在springmvc中配置,并且在mvc:annotation-driven添加conversion-service属性,值为conversionService。
<!-- 自定义参数绑定 -->
<bean id="conversionService" class="org.springframework.format.support.FormattingConversionServiceFactoryBean">
<!-- 转换器 -->
<property name="converters">
<!-- 日期类型的转换 -->
<bean class="com.hxh.converter.DateConverter"></bean>
</property>
</bean>
<!-- 开启注解支持 -->
<mvc:annotation-driven conversion-service="conversionService"></mvc:annotation-driven>
配置的时候要注意累类的路径是否正确,并且还要开启注解支持:
<!-- 开启注解支持 --> <mvc:annotation-driven conversion-service="conversionService"></mvc:annotation-driven>
id就是你开启注解的“”里面的名称。
如果想在jsp页面中显示日期类型的数据,需要做出如下配置:
3. Jsp页面顶部添加fmt标签
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
4.Jsp页面中显示日期的位置,将从数据库读取到的日期类型的数据转换成字符串类型的数据.
<td><input type="text" name="createtime" value="<fmt:formatDate value="${items.createtime }" pattern="yyyy-MM-dd HH:mm:ss"/>"/></td>
或者:
<td><fmt:formatDate value="${custom.birthday }" pattern="yyyy-MM-dd"/></td>
例如:
只需要在显示日期的地方用
<fmt:formatDate value="${user.birthday }" pattern=“yyyy-MM-dd”/>
value的值是我用jstl写出来的,具体的数值根据你自己的实际数值来确定.