【问题标题】:SELECT statement from MS SQL returns dates with loss of 2-4 days来自 MS SQL 的 SELECT 语句返回丢失 2-4 天的日期
【发布时间】:2025-12-06 07:45:01
【问题描述】:

UPD:已解决。我在每个表中将 DATE 字段更改为 DATETIME 类型。我仍然不知道问题的“性质”以及为什么它如此随机,但现在问题已解决。谢谢大家!

我使用 MS SQL Express 2014 来存储一些数据。 我有 3 个不同的表,每个表都包含一个 DATE 类型字段。 当我通过 JDBC 对每个表执行 select 语句时,ResultSet 在某些情况下会返回丢失 2-4 天的日期。

代码如下:

ResultSet rs = preparedStatement.executeQuery();
while(rs.next()){
    java.sql.Date date = rs.getDate("DATE");
}

DB 中的日期看起来像:“1942-06-10”、“1938-03-15”等。无论日期看起来如何,丢失只是偶尔发生。在 Java 方面,它们变为“1942-06-08”或“1938-03-11”。

我无法理解问题的原因,因为 在某些情况下,“日期”包含确切的数据作为数据库中的字段, 在其他情况下,与 DB 字段相比,“日期”会减少 2 到 4 天。 谢谢!

【问题讨论】:

  • 您能否从您的数据库中为这两种情况添加示例日期,以及 java 端的结果?
  • 只需检查两个数据库的时区
  • 损失发生的日期是历史日期吗,比如说,100 多年前?丢失是否总是发生在该范围内的日期或仅有时发生?如果你尝试LocalDate date = rs.getObject("DATE", LocalDate.class),你会得到同样的损失吗? (java.sql.Date 类已经过时并且存在一些设计问题,所以在所有条件相同的情况下,我会推荐后一种方法。)
  • DB 中的日期看起来像:“1942-06-10”、“1938-03-15”等。无论日期看起来如何,丢失只是偶尔发生。在 Java 方面,它们变为“1942-06-08”或“1938-03-11”。
  • 欢迎来到 Stack Overflow。这是 vuja de(以前从未见过)。请显示您的查询和说明问题的几行示例数据。你可以edit你的问题来做到这一点。

标签: java sql-server date datetime


【解决方案1】:

解决了。我在每个表中将 DATE 字段更改为 DATETIME 类型。我仍然不知道问题的“性质”以及为什么它如此随机,但现在问题已解决。谢谢大家!

【讨论】:

  • 非常有趣。谢谢。