Hibernate時區設定

需要應付不同時區時,資料庫儲存UTC+0的時間,頁面動態決定要顯示的時區。但從資料庫取出的java.util.Date會自動設定為環境預設時區

方案1

修改JVM預設時區:

java -Duser.timezone=UTC -jar project.jar

或是

@SpringBootApplication
public class Application {
 
  @PostConstruct
  void started() {
    TimeZone.setDefault(TimeZone.getTimeZone("UTC"));
  }
 
  public static void main(String[] args) {
    SpringApplication.run(Application.class, args);
  }
 
}
方案2

用Hibernate的話可以設定JDBC時區

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

參考資料

https://moelholm.com/2016/11/09/spring-boot-controlling-timezones-with-hibernate/