使用java中的日期类型



我试图从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值。这样做比把它留给隐式转换要好。

相关内容

  • 没有找到相关文章

最新更新