• 日期处理的二种方式


    一:使用注解的方式

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

  • 相关阅读:
    [FJOI 2016] 神秘数
    [SHOI 2017] 寿司餐厅
    [HAOI 2012] Road
    [HAOI 2012] 容易题
    [TJOI 2018] XOR
    [NOI 2011] 阿狸的打字机
    [ZJOI 2010] 排列计数
    [TJOI2016 & HEOI2016] 字符串
    [HNOI 2011] 数学作业
    【NTT】loj#6261. 一个人的高三楼
  • 原文地址:https://www.cnblogs.com/masterhxh/p/13947794.html
Copyright © 2020-2023  润新知