数据库时间字段
create_time datetime 创建时间
问题
前端发现创建时间与当前系统时间相差8小时,查看数据库时间也是与当前系统相差8小时
解决步骤:
1.数据库时间问题,与时区有关
参考博文:
https://www.jb51.net/article/176404.htm
https://blog.csdn.net/iris_xuting/article/details/84886483
方式一:改变Java连接数据库的url
修改url连接,添加时区:
&serverTimezone=Asia/Shanghai
结果:mysql数据库时间与系统时间一致了。但是前端显示时间还是相差8小时。继续解决。
方式二:修改mysql数据库时区
1).查看当前数据库的时区:
show global variables like'%time_zone%';
+------------------+--------+
| Variable_name | Value |
+------------------+--------+
| system_time_zone | |
| time_zone | SYSTEM |# 数据库使用时区跟system一致,即当前系统时区,是耶路撒冷(+2:00),等同于set time_zone='+2:00'了。
2).解决方案:
方式一:设置服务器的时区都为北京时间,即修改数据库服务器的time_zone为“+8:00”解决。
这个参数,可以在通过mysqld命令启动数据库的时候加上参数 –default-time-zone=timezone来设置时区,
也可以通过my.cnf配置文件的[mysqld]标签里增加 default-time-zone='timezone’这一行来设置。
方式二:通过命令修改全局或者会话级别的time_zone,可以即时生效。
修改全局time_zone的值
set global time_zone='+8:00';
或
修改当前会话的time_zone
set time_zone='+8:00';
2.Java时间问题,返回时间json格式不对
参考博文:https://www.cnblogs.com/jiefu/p/12491812.html
方法:使用注解 @JsonFormat
格式化返回时间,并设置时区
@JsonFormat(pattern="yyyy-MM-dd HH:mm:ss",timezone="Asia/Shanghai")
结果:前端时间与数据库时间一致,即前段时间、数据库时间都与系统时间一致,问题解决。
冷知识-多个时区概念的理解
DST
Daylight Saving Time,“夏令时”,一般在天亮早的夏季人为将时间调快一小时,可以使人早起早睡,减少照明量,以充分利用光照资源,从而节约照明用电。中国1986-1991年实行夏令时,1992年废除。
CST
China Standard Time(老外认为有其他含义,中国就这个缩写),中国标准时。
GMT
Greenwich Mean Time,格林威治标准时,地球每15°经度 被分为一个时区,共分为24个时区,相邻时区相差一小时;例: 中国北京位于东八区。
Asia/Shanghai与GMT+8的区别
1992年以后,在中国,GMT+8和Asia/Shanghai是一样的时间。