日期的处理
日期的提交处理(前端发送请求到controller接收的过程
)
单个日期处理
// 要使用 @DateTimeFormat,此注解必须搭配 springmvc.xml 文件中的 <mvc:annotationdriver> 标签
@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
要存储或者显示的日期应该满足特定条件格式(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
处理显示的日期
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;
}
}
未处理显示的日期显示的格式
// 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();
}
}