【发布时间】:2011-08-29 07:25:16
【问题描述】:
在保留时间戳的同时将 java.sql.Date 对象转换为 java.util.Date 的最简单方法是什么?
我试过了:
java.util.Date newDate = new Date(result.getDate("VALUEDATE").getTime());
没有运气。它仍然只是将日期部分存储到变量中。
【问题讨论】:
-
这种继承是一种奇怪的设计遗产
在保留时间戳的同时将 java.sql.Date 对象转换为 java.util.Date 的最简单方法是什么?
我试过了:
java.util.Date newDate = new Date(result.getDate("VALUEDATE").getTime());
没有运气。它仍然只是将日期部分存储到变量中。
【问题讨论】:
如果您真的希望运行时类型为 util.Date,那么只需执行以下操作:
java.util.Date utilDate = new java.util.Date(sqlDate.getTime());
布赖恩。
【讨论】:
此函数将从 SQL 日期对象返回转换后的 java 日期。
public static java.util.Date convertFromSQLDateToJAVADate(
java.sql.Date sqlDate) {
java.util.Date javaDate = null;
if (sqlDate != null) {
javaDate = new Date(sqlDate.getTime());
}
return javaDate;
}
【讨论】:
在最近的实现中,java.sql.Data 是 java.util.Date 的子类,因此不需要转换。 看这里:https://docs.oracle.com/javase/1.5.0/docs/api/java/sql/Date.html
【讨论】:
由于java.sql.Date 扩展了java.util.Date,你应该可以做到
java.util.Date newDate = result.getDate("VALUEDATE");
【讨论】:
newDate 仍将是java.sql.Date 的实例
通过阅读源代码,如果java.sql.Date 确实有时间信息,则调用getTime() 将返回一个包含时间信息的值。
如果这不起作用,则信息不在java.sql.Date 对象中。我希望 JDBC 驱动程序或数据库(实际上)将时间分量归零......或者信息一开始就不存在。
我认为您应该使用java.sql.Timestamp 和相应的结果集方法,以及相应的SQL 类型。
【讨论】:
类 java.sql.Date 被设计为只携带一个没有时间的日期,所以你看到的转换结果对于这个类型是正确的。您需要使用 java.sql.Timestamp 来获取带有时间的完整日期。
java.util.Date newDate = result.getTimestamp("VALUEDATE");
【讨论】:
java.sql.Timestamp 也派生自java.util.Date,您也可以只使用 Timestamp 实例。