【发布时间】: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