java中的實體類時間格式化

實體類時間格式化

java 實體類 時間格式化註解

@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date time;
  • pattern:時區
  • timezone:時區

@JsonFormat 默認是標準時區的時間,多出現少8小時的情況

使用時,按需求加上時區 北京時間 東八區 timezone=”GMT+8”

作用:後臺的時間 格式化 發送到前臺

@DateTimeFormat 接受前臺的時間格式 傳到後臺的格式

實體類時間類型屬性常用註解

假如有如下實體類:

import java.util.Date;
 
public class DateVo {
    private Date date;
 
    public void setDate(Date date){
        this.date = date;
    }
    public Date getDate(){
        return date;
    }
}

提供如下接口:

@RestController
@RequestMapping("/date")
public class DateController {
 
    @RequestMapping("test")
    public DateVo getDate(DateVo vo){
        System.out.println(vo.getDate());
 
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        String date = sdf.format(vo.getDate());
        System.out.println(date);
 
        DateVo dateVo = new DateVo();
        dateVo.setDate(new Date());
        return dateVo;
    }
}

直接訪問接口(參數vo: 2020-12-25 11:22:33),會拋出以下異常:

理由很簡單:類型參數不匹配,傳入參數vo的date為字符串類型,而要求時Date類型,這就需要入參格式化

註解一:DateTimeFormt(入參格式化)

註解@DateTimeFormt是由spring框架提供的,作用就是實現在入參格式化過程中對時間類型參數指定格式。

對上述實體類做如下修改:

public class DateVo {
    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
    private Date date;
 
    public void setDate(Date date){
        this.date = date;
    }
    public Date getDate(){
        return date;
    }
}

再次訪問接口(參數vo: 2020-12-25 11:22:33),訪問成功,在控制臺會打印如下內容:

Fri Dec 25 11:22:33 CST 2020

2020-12-25 11:22:33 

同時向前端返回:

"2020-12-25T03:40:26.625+00:00"

對於這個返回內容可能不符合前端時間格式要求,需要對其進行出參格式化

註解二:JsonFormt(出參格式化)

註解@JsonFormt是由jackson提供的,由於spring框架中默認集成的json工具是jackson(國內使用更廣泛的fastjson,其提供註解@JSONField),因此使用註解@JsonFormt不需要另外引入依賴,再次對實體類修改:

public class DateVo {
    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
    @JsonFormat(
    	pattern = "yyyy-MM-dd HH:mm:ss",
   	 	timezone = "GMT+8"
	)
	private Date date;
 
    public void setDate(Date date){
        this.date = date;
    }
    public Date getDate(){
        return date;
    }
}

繼續訪問接口(參數vo: 2020-12-25 11:22:33)返回:

2020-12-25 11:40:26

註意:在使用註解@JsonFormt時必須要指定時區,默認情況下為0時區,於北京時間(東8時區)相差8個小時

註解三:JSONField(出參格式化)

在國內使用更多是Alibaba 開源的fasejson,其同樣提供瞭指定時間格式的註解。使用spring框架開發時需要註意的是spring框架中沒有集成fastjson,因此需要在pom文件中引入其依賴,實體類修改如下:

public class DateVo {
    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
    @JSONField(format="yyyy-MM-dd HH:mm:ss")
	private Date date;
 
    public void setDate(Date date){
        this.date = date;
    }
    public Date getDate(){
        return date;
    }
}

以上為個人經驗,希望能給大傢一個參考,也希望大傢多多支持WalkonNet。

推薦閱讀: