我试图从SQL查询中获得两个日期,并比较它们。因此,为了比较它们,我认为我需要使用"Date"类型。这就是我正在尝试的,我知道我从resultSet错误地获得日期,但我不确定如何做到这一点。
Date validDate = new Date(0);
Date currentDate = new Date(0);
// query
if (result.next()) {
validDate = (result.getObject("validDate")!=null)?result.getObject("validDate").toDate():"";
currentDate = (result.getObject("currentDate")!=null)?result.getObject("currentDate").toDate():"";
}
if (currentDate > validDate) {
//do something
}
所以再一次,这是我的尝试,但我似乎不能让它运行。提前谢谢。
编辑:查询有TO_CHAR(列, 'MM-DD-YYYY')在我得到的两个日期。编辑:现在您已经提到您的查询将日期转换为字符串,停止这样做。您最终会在调用端重新解析它——那么为什么要毫无意义地执行两个转换呢?保持字符串转换的绝对最小值——尽可能使用最合适的数据类型。
原始回答
您还没有显示result
是什么,但您可能希望ResultSet.getDate()
之类的东西来获取日期值。
请注意,您的比较代码也不能工作,因为Date
没有>
-您需要这样做:
if (currentDate.after(validDate))
或获取底层的millis数:
if (currentDate.getTime() > validDate.getTime())
另外:
- 你不能给
Date
变量赋值" -字符串不是Date
。 - 可以直接调用
ResultSet.getDate()
并检查返回值是否为null
,而不是先调用getObject
,然后再调用getDate()
Try currentDate.after(validDate)
为了比较日期,我总是使用Date的before和after方法。
通过getObject方法访问日期时可能会发生一些令人讨厌的事情。您应该尝试使用rs.getTimestamp
(带timeinfo)或rs.getDate
(不带timeinfo)方法。
而且,由于date对象的层次结构相当复杂,您应该只使用date1.compareTo(date2) > 0
方法比较日期。
如果您的结果对象是ResultSet,则
Date validDate = result.getTimestamp("validDate");
Date currentDate= result.getTimestamp("currentDate");
// you can add null checks here too....
// you can also use if (currentDate.getTime() > validDate.getTime()){}
if (currentDate.before(validDate)) {
//some code inhere...
}
你的代码至少有三处错误:
-
""
是一个String
字面量,所以你不能在你的三元表达式中使用它来分配给Date
类型的变量-使用null
代替,这样你就不需要一个三元 -
ResultSet.getObject()
返回一个没有toDate()
方法的Object
。相反,只需使用ResultSet.getDate()
- 不能使用
>
操作符比较Date
实例。您必须使用Date
类的before()
和after()
方法
Date validDate = new Date(0);
Date currentDate = new Date(0);
if (result.next()) {
validDate = result.getDate("validDate");
currentDate = result.getDate("currentDate");
}
if (currentDate.after(validDate)) {
//do something
}
if
子句可能必须包含一些额外的逻辑来处理null
值。这样做比把它留给隐式转换要好。