关于前后端日期格式化的问题

本文探讨了前后端日期处理差异及解决方案,重点介绍了如何通过设置时区来避免日期格式化过程中出现的时间偏差问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值