日期格式处理问题

日期问题
  • 日期的处理

    • 日期的提交处理(前端发送请求到controller接收的过程)

      • 单个日期处理

        // 要使用 @DateTimeFormat,此注解必须搭配 springmvc.xml 文件中的  标签
        @GetMapping("/myDate")
        public void myDate(
                @DateTimeFormat(pattern = "yyyy-MM-dd") Date myDate) {
            //  @DateTimeFormat(pattern = "yyyy-MM-dd") Date myDate 将网页上的字符串日期转换为 Date 类型
            //  System.out.println(myDate); => 等价于视图显示,获得的数据类型是 Date,要想友好的显示,就需要格式化 SimpleDateFormat
            System.out.println(myDate);
        }
        
      • 类中全局日期处理

        @InitBinder
        public void dateInitBinder(WebDataBinder dataBinder) {
            SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            dataBinder.registerCustomEditor(Date.class,new CustomDateEditor(simpleDateFormat, true));
        }
        
  • 日期显示处理(将日期按照指定格式显示到网页中或者存储)

    • 日期字段在实体类中时,可以添加注解在日期字段上或者set方法上

      package com.example.pojo.domain;
      
      import com.fasterxml.jackson.annotation.JsonFormat;
      import lombok.AllArgsConstructor;
      import lombok.Builder;
      import lombok.Data;
      import lombok.NoArgsConstructor;
      import org.springframework.format.annotation.DateTimeFormat;
      
      import java.io.Serializable;
      import java.util.Date;
      
      @Data
      @Builder
      @NoArgsConstructor
      @AllArgsConstructor
      public class User implements Serializable {
          private Integer id;
          private String username;
          private String password;
          private String phone;
          private String email;
          private Integer role;
          @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
          private Date createTime;
          @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
          private Date updateTime;
          private String photo;
          private Integer deleted;
      
          @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
          public Date getCreateTime() {
              return createTime;
          }
          // json 中的日期显示,需要在类中的成员变量的 getXXX 方法上加注解 @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
          @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
          public Date getUpdateTime() {
              return updateTime;
          }
      }
      
    • 网页中获取到的日期类型

      package com.example.controller;
      
      import org.springframework.format.annotation.DateTimeFormat;
      import org.springframework.web.bind.annotation.GetMapping;
      import org.springframework.web.bind.annotation.RestController;
      
      import java.util.Date;
      
      @RestController
      public class DateTestController {
          @GetMapping("/myDate")
          public String myDate(
                  @DateTimeFormat(pattern = "yyyy-MM-dd") Date myDate) {
              return myDate.toString();
          }
      }
      // @DateTimeFormat 此注解的作用是将网页中字符串的日期按照此格式格式化为日期类型注入到 myDate => Date
      

      日期格式处理问题_第1张图片

      • 要存储或者显示的日期应该满足特定条件格式(Eg: yyyy-MM-dd [HH:mm:ss])

        // 存储或回显时需要将 “Thu Sep 09 00:00:00 CST 1999”格式的日期再次进行处理
        
        • @DateTimeFormat 该注解自动会解析处理,会把字符串类型 按照格式yyyy-MM-dd HH:mm:ss 转换成时间类型

        • @JsonFormat这个注解是从数据库查询出来,返回到页面的的转换,把时间类型转换成JSON格式类型前提取出进行展示

          // json 中的日期显示,需要在类中的成员变量的 getXXX 方法上加注解 @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
          
          package com.example.pojo.domain;
          
          import com.fasterxml.jackson.annotation.JsonFormat;
          import lombok.AllArgsConstructor;
          import lombok.Builder;
          import lombok.Data;
          import lombok.NoArgsConstructor;
          import org.springframework.format.annotation.DateTimeFormat;
          
          import java.io.Serializable;
          import java.util.Date;
          
          @Data
          @Builder
          @NoArgsConstructor
          @AllArgsConstructor
          public class User implements Serializable {
              private Integer id;
              private String username;
              private String password;
              private String phone;
              private String email;
              private Integer role;
              @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
              @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
              private Date createTime;
              @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") // 网页中展示和数据库存储时的数据类型
              @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") // 将前端从网页上提交的日期字符串按照此格式接受并注入到 Date 类型
              private Date updateTime;
              private String photo;
              private Integer deleted;
          }
          
          // 以上两个日期注解不支持 LocalDateTime
          
          

          日期格式处理问题_第2张图片

日期格式测试
  • 处理显示的日期

    package com.example.controller;
    
    import org.springframework.format.annotation.DateTimeFormat;
    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.RestController;
    
    import java.text.SimpleDateFormat;
    import java.util.Date;
    
    @RestController
    public class DateTestController {
        @GetMapping("/myDate")
        public String myDate(
                @DateTimeFormat(pattern = "yyyy-MM-dd") Date myDate) {
            // SimpleDateFormat
            SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            String format = simpleDateFormat.format(myDate);
            return format;
        }
    }
    
    

    日期格式处理问题_第3张图片

  • 未处理显示的日期显示的格式

    // http://localhost:8080/myDate?myDate=1999-09-09,1999-09-09是一个字符串日期,接收时是 Date myDate 类型
    // @DateTimeForma 将 strDate 转换为了 Date 类型的日期
    @RestController
    public class DateTestController {
        @GetMapping("/myDate")
        public String myDate(
                @DateTimeFormat(pattern = "yyyy-MM-dd") Date myDate) {
            return myDate.toString();
        }
    }
    
    

    日期格式处理问题_第4张图片

你可能感兴趣的:(java)