3">
当前位置:恩施知识网 > 科技创新 > 正文

数据库输入时间「解决过程输入的日期与保存到数据库的日期不一致」

在一个系统中输入的日期与数据库保存的日期相差一天,如输入1986年9月,数据库保存为1986-8-31。
做过如下的尝试:
1.更换过日期控件:由原来的Layui日期控件改为了My97DatePicker
2.实体类注解@DateTimeFormat(pattern = "yyyy-MM")@JsonFormat(timezone = "GMT 8",pattern = "yyyy-MM")private Date rq1;感觉@JsonFormat不起作用的。
3

在一个系统中输入的日期与数据库保存的日期相差一天,如输入1986年9月,数据库保存为1986-8-31。

做过如下的尝试:

1.更换过日期控件:由原来的Layui日期控件改为了My97DatePicker

2.实体类注解

@DateTimeFormat(pattern = "yyyy-MM")@JsonFormat(timezone = "GMT 8",pattern = "yyyy-MM")private Date rq1;

感觉@JsonFormat不起作用的。

3.检查配置文件

#DateConvertSpring.jackson.date-format=yyyy-MM-dd HH:mm:ssspring.jackson.time-zone=GMT 8spring.mvc.format.date=yyyy-MM-dd

经过以上的过程,都没能解决。

最后的解决方法是:

将配置文件中的数据库连接改为serverTimezone=Asia/Shanghai:

spring.datasource.url=jdbc:mysql://localhost:3306/tools?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=UTF-8

原先的是这样的serverTimezone=GMT+8:

spring.datasource.url=jdbc:mysql://localhost:3306/tools?serverTimezone=GMT+8&useUnicode=true&characterEncoding=UTF-8&allowMultiQueries=true

网上的资料:数据源配置Asia/Shanghai和GMT+8区别

在Spring程序中配置了spring.jackson.time-zone=GMT 08时,部分时间相差一个小时问题,且是固定的时间出现了固定的时差问题。经过排查,发现是JVM的默认时区为:Asia/Shanghai,两者不一致,然后Asia/Shanghai 这个时区并不一定与GMT 08这个时区相等,他们是2种定义标准。Asia/Shanghai 这个代表的是中国的时区,但在历史中,有国家(包含中国)政策颁布了在1986-1991年等还存在夏令时。在这样的时间区间,夏季时,会将时间拨快1个小时(即东9区时间),夏季结束时会再次将时间拨回一个小时(即东8区时间)。所以要保证程序显示的时间没有问题,需要将JVM和spring.jackson.time-zone设置的时区保持一致即可解决问题

用GMT 8前端传1987-05-01 00:00:00,然后再返回给前端会少一个小时。同样的如果是使用MySQL数据库也会遇到此问题,所以网上很多说连接后面加上serverTimezone=GMT+8是不可靠的,改为serverTimezone=Asia/Shanghai就行了

免责申明:以上内容属作者个人观点,版权归原作者所有,不代表恩施知识网立场!登载此文只为提供信息参考,并不用于任何商业目的。如有侵权或内容不符,请联系我们处理,谢谢合作!
当前文章地址:https://www.esly.wang/keji/84905.html 感谢你把文章分享给有需要的朋友!
上一篇:2023年雨量多还是少,2023年几月份雨水多 下一篇:回忆过去是为了更好的前行,回想历史面对今天的考验该怎么办

文章评论