ZonedDateTime 到 MySQL 日期时间

ZonedDateTime to MySQL DateTime

我的应用程序使用 Database-per-tenant 多租户,每个租户都有一个时区。

我不想使用时间戳,因为我不想让数据库处理时区转换,但我想做的是在 ZonedDateTime 和 MySQL DateTime 之间进行转换。

在我的应用程序中,我像这样检索租户的当前时间:

ZonedDateTime.of(LocalDateTime.now(), tenant.getTenantZoneId());

我想将其写入数据库,因为分区日期时间会显示它(即应用时区和 DST)。

从数据库中读取后,这种转换应该是不必要的,我可以假设所有日期时间的时区。

我该如何进行初始翻译?我怎样才能以一种很好的方式做到这一点 JPA 提供商(尤其是休眠)

如果我没理解错的话,你想写ZonedDateTime to MySQL's DATETIME type, but without preserving zone ID, etc. If so, you simply want to write it as LocalDateTime

如果您的驱动程序足够新,只需编写 LocalDateTime to the database using PreparedStatement.setObject 即可:

preparedStatement.setObject(index, zonedDateTime.toLocalDateTime());

至于阅读,ResultSet.getObject应该可行:

LocalDateTime localDateTime = resultSet.getObject(index, LocalDateTime.class);
ZonedDateTime zonedDateTime = ZonedDateTime.of(localDateTime, tenant.getTenantZoneId());