Spring Boot中如何根据连接时区自动检索ZonedDateTime/OffsetDateTime?

问题描述 投票:0回答:1

背景

我有一个 MySQL 8 服务器,默认时区设置为 +08:00,现有日期存储使用

DATETIME
类型。

我想使用 Spring Data JPA 将日期检索到 ZonedDateTime 中,例如2024-07-08T08:00:00+08:00 或 2024-07-08T00:00:00Z。最终将此日期时间发送到前端,以便客户端根据自己的时区确定如何渲染。

应用程序服务器在云端运行。我相信 TZ 环境变量当前配置错误。有些服务器未设置,有些设置为“Asia/Kuala_Lumpur”。

我想我必须正确设置 JDBC 连接字符串和 TZ 中的 serverTimeZone 。但我一直得到错误的输出。例如,在 DBeaver 中查看的

2024-07-08T08:00:00
在 Spring Boot 中返回为
2024-07-08T08:00:00Z

我最接近的方法是将 JDBC 和 TZ 设置为“Asia/Kuala_Lumpur”,并使用

ZoneId.systemDefault()
进行转换。如果可能的话,我想在不向我的所有实体添加转换器的情况下实现这一目标。

问题

Spring Boot中如何根据连接时区自动检索ZonedDateTime/OffsetDateTime?

java spring spring-boot spring-data-jpa
1个回答
0
投票

默认时区设置为 +08:00 的 MySQL 8 服务器,

您不需要设置默认时区。编写代码以明确指定您想要/预期的时区。不要仅仅因为某些系统管理员/DBA 更改了默认设置就让您的 Java 代码中断。

Spring Data JPA 将日期检索到 ZonedDateTime

您不能直接执行此操作。 SQL 标准不支持时区,仅支持偏移量。

偏移量只是 UTC 时间子午线之前或之后的小时数、分钟数、秒数。时区的意义要大得多。时区是特定地区人民所使用的偏移量的过去、现在和未来变化的命名历史,由其政客决定。

© www.soinside.com 2019 - 2024. All rights reserved.