项目场景:
springboot项目通过时间筛选数据、
问题描述
时间筛选问题,同一服务部署在本地和Linux服务器,同样的时间筛选数据不一致
接收的参数
@JsonFormat(pattern = "yyyy-MM-dd")
private Date queryDate;
服务器打印日志出来的时间为
Wed Jun 08 00:00:00 UTC 2022
本地打印出来的时间为
Wed Jun 08 00:00:00 CST 2022
数据库连接配置
url: jdbc:mysql://xx/xx?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&serverTimezone=GMT%2B8
原因分析:
UTC时间:世界协调时间(UTC)也就是零时区的时间
CST时间:中央标准时间 Central Standard Time (USA) UT-6:00(美国cst时间:零区时减6个小时)
如:当UTC时间为0点时,中国CST时间为8点,因为零时区和中国北京时区相差8个时区
UTC + 8 就是中国的时间
解决方案:
需要将Linux系统时间Date改为CST
# 备份
mv /etc/localtime /etc/localtime.bak
# 软链接到上海时区文件
ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
# 更新硬件时间
hwclock -w
使用命令date查看系统当前时间
date
timedatectl查看系统时间概览
timedatectl
使用命令修改时区后,应用服务可能无法筛选出正确结果,重启应用后恢复正常