关于这两个时间转化注解,先说结论
一、介绍
1、@DateTimeFormat
- @DateTimeFormat 并不会根据得到其属性 pattern 把前端传入的数据转换成自己想要的格式,而是将前端的String类型数据封装到Date类型;其次它的 pattern 属性是用来规范前端传入数据的格式
- @DateTimeFormat 它用于前端日期String数据提交封装到日期Date数据类型中
- 示例1:前端传递的2023-09-23 17:10:30 后端采用@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") 不会出错
- 示例2:前端传递的2023-09-23 17:10:30 后端采用@DateTimeFormat(pattern = "yyyy-MM-dd") 出错
- 示例3:前端传递的2023-09-23 后端采用@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") 不会出错
2、 @JsonFormat
- @JsonFormat 会对前端传来的数据进行处理,按照其 pattern 属性定义把传入的数据转化
- @JsonFormat 同样会对后端传给前端的数据进行处理,按照其 pattern 属性定义直接进行截取返回给前端
- 示例1:前端传递的2023-09-23 17:10:30 后端采用@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") 不会出错
- 示例2:前端传递的2023-09-23 17:10:30 后端采用@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") 不会出错
- 示例3:前端传递的2023-09-23 后端采用@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") 出错
二、代码演示
创建实体类
- @Data
- public class Test1 {
-
- /**
- * 创建时间
- */
- @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
- private Date createTime;
-
- /**
- * 创建时间
- */
- @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
- private Date updateTime;
-
- /**
- * 创建时间
- */
- @DateTimeFormat(pattern = "yyyy-MM-dd")
- private Date createTime2;
-
- /**
- * 创建时间
- */
- @DateTimeFormat(pattern = "yyyy-MM-dd")
- private Date updateTime2;
-
- /**
- * 创建时间
- */
- @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
- private Date createTime3;
-
- /**
- * 创建时间
- */
- @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
- private Date updateTime3;
-
- /**
- * 创建时间
- */
- @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
- private Date createTime4;
-
- /**
- * 创建时间
- */
- @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
- private Date updateTime4;
-
- }
创建controller
- @RestController
- @RequestMapping("/test")
- public class TestController {
-
-
- @PostMapping("/test1")
- public ResultVo> test1(@RequestBody Test1 test1) {
-
- System.out.println("test1 = " + test1);
-
- return ResultVo.success(test1);
- }
-
- }

前端传递的时间类型为日期字符串类型(如:2023-09-22),后端采用 @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")接收会出错

前端传递的时间类型为时间字符串类型(如:2023-09-23 09:30:30),后端采用@DateTimeFormat(pattern = "yyyy-MM-dd")接收会报错
关于时间返回类型

createTime、createTime2前端传递日期字符串,后端采用@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")接收,controller处理完返回给前端的时间格式为日期Date
createTime3、createTime4前端日期字符串,后端用@JsonFormat 对应的格式接收,按照其 pattern 属性定义直接进行截取返回给前端