日期处理的二种方式

一:使用注解的方式

@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 ></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写出来的,具体的数值根据你自己的实际数值来确定.