最近项目里又发现一个问题,本地运行时间和服务器上的时区不一样,导致显示的时间不同,还有各种时间格式的问题。在这里整理一下。
统一时区
数据库连接url加上:
&useSSL=false&serverTimezone=UTC&useUnicode=true&characterEncoding=UTF8
然后在application启动类设置时区:
@PostConstruct
void started() {
TimeZone.setDefault(TimeZone.getTimeZone("UTC"));
}
数据库时区
在mysql中查看关于时区的设置
show variables like '%time_zone%';

可以发现如果没有设置的话默认使用的时区是CST,可问题是CST是一个很复杂的时区。
科普一下:CST可以为如下4个不同的时区的缩写:
美国中部时间:Central Standard Time (USA) UT-6:00澳大利亚中部时间:Central Standard Time (Australia) UT+9:30
中国标准时间:China Standard Time UT+8:00
古巴标准时间:Cuba Standard Time UT-4:00
这样的话我们就需要去修改一下,改成 +0:00,或者 +8:00,都是可以的。
--自MySQL 8.0 GA版本开始支持将参数写入并且持久化:
mysql> set persist time_zone='+0:00';
也可以直接修改配置文件
default-time-zone = '+8:00'
然后重启。
时间格式
SimpleDateFormat和DateTimeFormatter时间格式化
这个没什么说的,他们两的区别主要是一个不是线程安全,DateTimeFormatter是线程安全的。
他们还可以设置时区
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
simpleDateFormat.setTimeZone(TimeZone.getTimeZone("GMT+8:00"));
配置文件的设置
spring:
jackson:
# 格式化返回时间 yyyy-MM-dd HH:mm:ss
date-format: yyyy-MM-dd HH:mm:ss
time-zone: GMT+8
优点是统一, Controller 在返回数据时,会自动调用 Spring Boot 框架中内置的 JSON 框架 Jackson,对返回的数据进行统一的 JSON 格式化处理
博客讨论了在项目中遇到的本地与服务器时区不一致导致的时间问题,提供了通过设置数据库URL和应用启动类调整时区的解决方案。同时,提到了MySQL中CST时区的复杂性,并给出了修改为固定时区的方法。此外,还涉及了SimpleDateFormat和DateTimeFormatter的时间格式化,以及Spring Boot中配置文件的日期格式和时区设置,强调了统一时间格式的重要性。
1万+

被折叠的 条评论
为什么被折叠?



