【发布时间】:2021-01-23 12:53:01
【问题描述】:
我四处搜索,但没有找到直接的解决方案。
- 数据对象有一个 LocalDate 字段
- MySQL 数据库有一个匹配的 DATE 列
创建日期,例如:
LocalDate d = LocalDate.of(2020, 1, 3);
它被写入 SQL 为:
stmt.setObject(1, d)); // or setDate with Date.valueOf(d)
在 SQL 中,它存储为 UTC(我猜),因此由于偏移量 (+1),它现在是 2020-01-02 并且也被这样获取。
(如果 DATE 列不存储小时,显然无法恢复到第二天。)
【问题讨论】:
-
您确定数据库表中的列是
DATE类型吗?由于几个小时的偏移量而转换它的数据库引擎表示不同的类型。也许DATETIME甚至TIMESTAMP。 -
这可能有助于诊断您的问题:stackoverflow.com/questions/19023978/…
-
您是否尝试过设置
String而不是Object?您可以尝试stmt.setString(1, d.format(DateTimeFormatter.ISO_LOCAL_DATE);并让数据库将其转换为DATE。 -
@deHaar 将 setString 与 ISO_LOCAL_DATE 格式化程序一起使用,谢谢!如果你能提供这个作为答案,我很乐意接受。
-
@FDM 好的,很酷......很高兴它正在工作!
标签: java mysql date timezone-offset