我有一个 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?
默认时区设置为 +08:00 的 MySQL 8 服务器,
您不需要设置默认时区。编写代码以明确指定您想要/预期的时区。不要仅仅因为某些系统管理员/DBA 更改了默认设置就让您的 Java 代码中断。
Spring Data JPA 将日期检索到 ZonedDateTime
您不能直接执行此操作。 SQL 标准不支持时区,仅支持偏移量。
偏移量只是 UTC 时间子午线之前或之后的小时数、分钟数、秒数。时区的意义要大得多。时区是特定地区人民所使用的偏移量的过去、现在和未来变化的命名历史,由其政客决定。