SpringBoot 统一时区的方案

本文详细解释了UTC时间的概念,即协调世界时,并介绍了如何在系统设计中统一使用UTC时间,包括服务器、数据库和前端数据的处理策略,确保全球范围内时间的一致性和准确性。

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

UTC时间是什么

协调世界时,又称世界统一时间、世界标准时间、国际协调时间。
由于英文(CUT)和法文(TUC)的缩写不同,作为妥协,简称UTC。

    UTC +时区差=本地时间
复制代码

中国时间

中国大陆、中国香港、中国澳门、中国台湾、蒙古国、新加坡、
马来西亚、菲律宾、西澳大利亚州的时间与UTC的时差均为+8,也就是UTC+8。
复制代码

1.系统采用多时区设计的时候,往往我们需要统一时区,需要统一的地方如下:

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

2.保证服务器时区为UTC

    服务启动的时候,将当前时区设置为UTC,代码如下:
复制代码
    @SpringBootApplication
    public class Application {
      @PostConstruct
      void started() {
        TimeZone.setDefault(TimeZone.getTimeZone("UTC"));
复制代码

3.保证数据库时区为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
复制代码
其中useLegacyDatetimeCode参数默认是true,我们需要手动设置为false,否则无效。
复制代码

转载于:https://juejin.im/post/5c41b6eaf265da615b71b96f

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值