場景
@JsonFormat注解是屬于Jackson的一個時間格式化注解,用于格式化時間。
可以在入參出參的時候就将時間格式化好。
@DateTimeFormat注解是spring的,它可以幫助我們把不是date類型的時間轉成date類型。
效果
如果前端傳來的為字元串格式的日期:“2022年07月29日 09時41分22秒”,則需要如下配置:
@JsonFormat(pattern = “yyyy年MM月dd日 HH時mm分ss秒”)
private Date createTime;
解析後存入DB中的則為:2023-02-23 09:46:12,查詢時傳回的資料則為:“2023年02月23日 09時46分12秒”
使用
1.引入依賴
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.12.6</version>
</dependency>
- 在java bean 屬性上添加注解
/**
* 交易開始時間
*/
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date payStartTime;
/**
* 交易結束時間
*/
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date payEndTime;
3.需要指定時區
JASKSON在序列化時間時是按照國際标準時間GMT進行格式化的,而在國内預設時區使用的是CST時區,兩者相差8小時,因為我們是東八區(中原標準時間),是以我們在格式化的時候要指定時區(timezone)。
中國時間(Asia/Shanghai) = 格林尼治時間(GMT)+ 8
格林尼治時間(GMT) = 世界協調時間(UTC) + 0
/**
* 交易開始時間
*/
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
private Date payStartTime;
/**
* 交易結束時間
*/
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
private Date payEndTime;
以上這個寫法雖然可以格式化,但是并不能自動轉換時間類型,需要配合@DateTimeFormat使用。
4.配合@DateTimeFormat使用
/**
* 交易開始時間
*/
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
private Date payStartTime;
/**
* 交易結束時間
*/
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
private Date payEndTime;