【发布时间】:2021-06-22 15:11:37
【问题描述】:
知道这种行为的原因吗?
来自具有两列的测试 MySQL 表
使用此数据(日期从 1 到 31)
通过 Java 检索日期
public static void executeQuery (Connection conn){
try {
Statement stmt = conn.createStatement() ;
String query = "SELECT recordId, testedDate FROM test_date;";
ResultSet rs = stmt.executeQuery(query) ;
if(rs != null) {
while(rs.next())
System.out.println(rs.getInt("recordId") + " - [" + rs.getDate("testedDate") + "]");
}else {
System.out.println("No results found!");
}
} catch (Exception e) {
e.printStackTrace();
}
}
我在记录 15 处得到重复的日期,并且从那里到结束的日期错误。
【问题讨论】:
-
检查时区偏移
-
永远不要使用
java.sql.Date和rs.getDate()。对于数据类型为datetime的列,甚至更少。java.sql.Date是在设计已经很糟糕的java.util.Date类之上的一个hack,幸运的是已经过时了。对于这种 MySQL 数据类型,请使用来自 java.time、现代 Java 日期和时间 API 的LocalDateTime和rs.getObject("testedDate", LocalDateTime.class)。 -
您的时区是在北美还是其他地方,夏令时 (DST) 于 3 月 14 日开始?
-
@OleV.V. LocalDateTime 成功了,我使用 CST 和时间变化,直到 4 月 4 日......虽然我想知道为什么它会抵消一整天而不是时间开关。