参考原文:https://www.cnblogs.com/chancy/p/9995562.html

思路为:
将数据库和服务器的时间都采用标准时区UTC存储处理。前端拿到标准时区的数据,统一根据用户所在时区进行转换。这样保证了后端数据时区的一致性,前端根据实际情况进行渲染。

保证服务器时区为UTC

服务启动的时候,将当前时区设置为UTC,代码如下:

@SpringBootApplication
public class Application {
@PostConstruct
void started()
{ TimeZone.setDefault(TimeZone.getTimeZone(
"UTC")); //TimeZone.setDefault(TimeZone.getTimeZone("Asia/Shanghai")); //TimeZone.setDefault(TimeZone.getTimeZone("GMT+8")); }

public static void main(String[] args) { SpringApplication.run(Application.class, args); } }

这样就保证了Java程序的时区为UTC。

保证数据库时区为UTC

Hibernate支持设置时区,在Springboot中增加配置如下:

spring.jpa.properties.hibernate.jdbc.time_zone = UTC

 

如果是MySQL数据库,连接池链接后面增加配置如下:

?serverTimezone=TimeZone&useLegacyDatetimeCode=false

 

如:

spring.datasource.url=jdbc:mysql://localhost:3306/db?useUnicode=true&characterEncoding=utf-8&useLegacyDatetimeCode=false&serverTimezone=UTC

 

posted on 2020-04-17 15:38  lshan  阅读(7967)  评论(0编辑  收藏  举报