仅是个人总结:
由于之前开发项目,总是发现日期格式化以后要么多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’)