SpringBoot 解决时区问题

原链接:https://www.cnblogs.com/yi1036943655/p/9854887.html

1、在启动类加上

@PostConstruct

void setDefaultTimezone() {
 TimeZone.setDefault(TimeZone.getTimeZone("Asia/Shanghai"));

2、在application.properties加上

 ## json setting
spring.jackson.date-format=yyyy-MM-dd HH:mm:ss
spring.jackson.time-zone=Asia/Shanghai 

 

3、在启动类 启动run方法里加上

public static void main(String[] args) {

   TimeZone.setDefault(TimeZone.getTimeZone("Asia/Shanghai"));

  SpringApplication.run(BaseMicroServiceApplication.class, args);

}

 

//否则放到服务器上会有8个小时时差问题

Spring Boot在处理基于PostgreSQL的时间戳时可能会遇到时区转换问题,如果你的PostgreSQL数据库设置为Asia/Shanghai时区,但在Spring Boot应用中默认使用的可能是UTC或者其他时区,这可能导致时间显示上相差8小时。 解决这个问题通常需要做以下步骤: 1. **配置Spring Data JPA**: 在`application.properties`或`application.yml`文件中,设置JPA的时区设置,比如: ``` spring.jpa.time-zone=Asia/Shanghai ``` 2. **配置日期格式**: 如果你在实体类中使用了`@Temporal(TemporalType.TIMESTAMP)`注解,确保格式化字符串也指定了Shanghai时区,例如: ```java @Column(updatable = true, insertable = true, columnDefinition = "TIMESTAMP WITH TIME ZONE") private LocalDateTime createdAt; DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss", Locale.CHINA); createdAt = LocalDateTime.now().format(formatter); // 使用Shanghai时区的格式 ``` 3. **手动转换时间**: 如果直接从数据库获取到的时间,可以在服务层手动转换为本地时区: ```java Date dbTimestamp = ...; // from PostgreSQL ZoneId chinaZoneId = ZoneId.of("Asia/Shanghai"); LocalDateTime localDateTime = Instant.ofEpochMilli(dbTimestamp.getTime()).atZone(chinaZoneId).toLocalDateTime(); ``` 4. **全局统一时区设置**: 如果整个应用程序都需要使用Shanghai时区,可以考虑创建一个全局的`TimeZoneProvider`,通过`ThreadLocal`或`ZoneId`静态变量保持时区一致性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值