【发布时间】:2021-08-15 08:49:35
【问题描述】:
我在使用java、spring、mysql时发现了一个未知问题。
mysql 时区 = UTC。
和 tomcat 时区 = KST。喜欢这段代码
@PostConstruct
void postConstruct() {
TimeZone.setDefault(TimeZone.getTimeZone("Asia/Seoul"));
}
现在,让我们检查一下 Java 时区。
TimeZone aDefault = TimeZone.getDefault();
System.out.println("aDefault = " + aDefault); // 'Asia/Seoul' It is what i wanted.
LocalDateTime = LocalDateTime.now();
System.out.println("localDateTime = " + localDateTime); // It is based on KST. what i wanted
问题是我在数据库上运行查询的那一刻。
//使用jpa,语义解释省略语法。
// jpa
@Query("select a from A a where datetime >= : dateTime")
明确确认查询是KST时间执行的,DB是UTC时间保存的,但是DB中导入的值符合基于KST的条件。
我真的不知道如何自动计算 DB 时间。
例如,应用程序将数据存储在 10 点钟位置,值存储在 1 点钟位置 (-9) 的 DB 中。
我立即运行查询,所以我检查了它是否发送到select ~ where datetime >= 10:00:00。
那么,由于是1点钟存储在DB中,所以不导入数据是正常的,但是数据是正常导入的。
【问题讨论】:
-
datetime列的类型是什么?是带时区还是不带时区?
标签: java mysql spring-boot jpa tomcat