ZonedDateTime到MySQL DateTime

时间:2018-08-06 16:12:25

标签: mysql datetime java-8 timezone zoneddatetime

我的应用程序使用每个租户数据库多租户,每个租户都有一个时区。

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

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

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

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

从数据库中读取数据后,不必进行这种转换,我可以假设所有日期时间都为时区。

我该如何进行初始翻译?以及如何通过JPA提供程序(尤其是休眠状态)以一种不错的方式做到这一点

1 个答案:

答案 0 :(得分:2)

如果我理解的正确,您想将ZonedDateTime写入MySQL的DATETIME类型,但不保留区域ID等。如果是这样,您只想将其写入LocalDateTime

如果您的驱动程序足够新,那么只需使用LocalDateTimePreparedStatement.setObject写入数据库即可。

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

至于阅读,ResultSet.getObject应该起作用:

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