JsonFormat指定時區

服務器的時區是:前端

Mysql的時區是:java

能夠看到系統時區是東八區,而Mysql用了系統時區,在Java使用 Date now = new Date()數據類型,並存入數據庫中類型爲datetime的對應字段,所存儲的時間爲東八區時間。數據庫中的時間顯示:sql

當前端須要展現該時間時,使用JsonFormat對時間進行格式化,發現時間被轉換成了GMT時間,比數據庫中顯示的時間少了8個小時:數據庫

@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
 private Date wifiSetTime;

返回給前端的時間:json

爲解決這個問題,能夠指定JsonFormat的時區,如:服務器

@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date wifiSetTime;

或者:app

@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai")
private Date wifiSetTime;

可是這種方式有個問題,不能靈活根據系統的時區來對時間進行轉化,timezone的值不能用一個變量,而若是使用JsonFormat.DEFAULT_TIMEZONE,這個默認時區就是GMT, 因此參考了https://stackoverflow.com/questions/55224233/jsonformat-default-timezone-doesnt-seem-to-be-working, 修改JsonFormat的時區,在獲取相關的實體方法所在的服務中加入:code

@Autowired
com.fasterxml.jackson.databind.ObjectMapper objectMapper;

在方法中添加:orm

objectMapper.setTimeZone(TimeZone.getDefault());

至此,返回的時間能夠正常了。xml

 

PS:使用SimpleDateFormat來format的時候,並不會將時間轉爲GMT時間,看來SimpleDateFormat的默認時區是取系統的。

相關文章
相關標籤/搜索