僅是個人總結:
由于之前開發項目,總是發現日期格式化以後要麼多8個小時,要麼少8個小時,是以總結如下:
目前遇到前端預設時區為GMT,與東八區相差八個小時。
前端 ——> 後端代碼(系統時區) ——> 入資料庫(GMT+8)
1、不設定時區@JsonFormat(pattern = “yyyy-MM-dd”)
2000-01-01 00:00:00(GMT) ——> 2000-01-01 00:00:00(GMT) ——> 2000-01-01 00:08:00(多8小時)
2000-01-01 00:08:00(GMT+8)
2、設定時區@JsonFormat(pattern = “yyyy-MM-dd”, timezone = “GMT+8”)
2000-01-01 00:00:00(GMT+8) ——> 1999-12-31 16:00:00(GMT) ——> 2000-01-01 00:00:00 (不變)
2000-01-01 00:00:00(GMT+8)
相同路徑,如果從資料庫到前端資料變化相同。
可見:String ——>Date 設定timezone = "GMT+8"會少八個小時
Date ——>String 設定timezone = "GMT+8"會多八個小時
多少都是相對于系統時區為 “GMT+8”;
日期格式化幾種思路:
1、 @JsonFormat(pattern = “yyyy-MM-dd”, timezone = “GMT+8”)
public void setCreateTimeStart(Date createTimeStart) {
if (createTimeStart != null) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(createTimeStart);
calendar.set(Calendar.HOUR_OF_DAY, 0);
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.SECOND, 0);
calendar.set(Calendar.MILLISECOND, 0);
this.createTimeStart = calendar.getTime();
}
}
2、SimpleDateFormat format = new SimpleDateFormat(“yyyy年MM月dd日”);
format.setTimeZone(TimeZone.getTimeZone(“GMT+8”));
3、mybatis中格式化查詢條件,忽略時分秒,date_format(fp.gmt_create,’%Y-%m-%d’) >= date_format(#{startDate},’%Y-%m-%d’)