springboot项目如何设置时区
springboot项目设置时区
在springboot启动类里添加如下代码:
@PostConstruct void setDefaultTimezone() { TimeZone.setDefault(TimeZone.getTimeZone("Asia/Shanghai")); // TimeZone.setDefault(TimeZone.getTimeZone("GMT+8")); }
用任何一个都行,将默认时区设置为东八区。
应用场景
有时候应用服务器的时间是UTC协调世界时间,在我们用浏览器访问的时候,就会出现日期快八小时,
因为服务器的时区跟我们东八区差八个小时导致的,用以上方法可以解决这个问题。
springboot统一时区的方案
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,否则无效。
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
相关文章
利用Spring Boot创建docker image的完整步骤
这篇文章主要给大家介绍了关于如何利用Spring Boot创建docker image的完整步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧2020-08-08Springboot整合MongoDB的Docker开发教程全解
这篇文章主要介绍了Springboot整合MongoDB的Docker开发,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值 ,需要的朋友可以参考下2020-07-07MyBatisPlus自定义JsonTypeHandler实现自动转化JSON问题
这篇文章主要介绍了MyBatisPlus自定义JsonTypeHandler实现自动转化JSON问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教2023-12-12记一次Maven项目改造成SpringBoot项目的过程实践
本文主要介绍了Maven项目改造成SpringBoot项目的过程实践,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下2022-03-03SpringMVC参数的传递之如何接收List数组类型的数据
这篇文章主要介绍了SpringMVC参数的传递之如何接收List数组类型的数据,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教2022-10-10
最新评论