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());
我的应用程序使用 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());