【问题标题】:Java - How do I prevent a LocalDate shifting back one day to MySQL Date?Java - 如何防止 LocalDate 回到 MySQL 日期?
【发布时间】: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


【解决方案1】:

您可以尝试设置String 而不是Object,然后让数据库将其转换为DATE。这基本上看起来像

LocalDate d = LocalDate.of(2020, 1, 3);
stmt.setString(1, d.format(DateTimeFormatter.ISO_LOCAL_DATE));

这应该保持日期值不变(如果可以的话)。 Object 转换在这里可能是个问题。

【讨论】:

    猜你喜欢
    • 2017-03-29
    • 1970-01-01
    • 1970-01-01
    • 2020-01-13
    • 1970-01-01
    • 2019-04-26
    • 2018-03-28
    • 2016-11-08
    • 2014-11-22
    相关资源
    最近更新 更多