Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在java中使用日期类型_Java_Date_Resultset - Fatal编程技术网

在java中使用日期类型

在java中使用日期类型,java,date,resultset,Java,Date,Resultset,我试图从一个SQL查询中获取两个日期,并对它们进行比较。所以要比较它们,我相信我需要使用“Date”类型。这就是我正在尝试的,我知道我从结果集中得到的日期不正确,但我不知道如何做到这一点 Date validDate = new Date(0); Date currentDate = new Date(0); // query if (result.next()) { validDate = (result.getObject("validDate")!=null)?re

我试图从一个SQL查询中获取两个日期,并对它们进行比较。所以要比较它们,我相信我需要使用“Date”类型。这就是我正在尝试的,我知道我从结果集中得到的日期不正确,但我不知道如何做到这一点

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
}
同样,这是我的尝试,但我似乎无法让它运行。提前谢谢


编辑:查询必须在我得到的两个日期上显示字符(列“MM-DD-YYYY”)。

尝试currentDate。在(validDate)之后编辑:现在您已经提到您的查询将日期转换为字符串,请停止这样做。您最终将在调用端对其进行重新分析-那么为什么要毫无意义地执行两次转换呢?将字符串转换保持在绝对最小值-尽可能使用最合适的数据类型


原始答案

您尚未显示什么是
result
,但可能需要获取日期值之类的内容

请注意,您的比较代码也不起作用,因为
日期没有
-您需要如下内容:

if (currentDate.after(validDate))
或获取基本的毫秒数:

if (currentDate.getTime() > validDate.getTime())
此外:

  • 不能将“”分配给
    日期
    变量-字符串不是
    日期
  • 您只需调用
    ResultSet.getDate()
    并检查返回值是否为
    null
    ,而不是先调用
    getObject
    ,然后再调用
    getDate()

为了比较日期,我总是使用日期的before和after方法。

通过getObject方法访问日期时,可能会发生一些不愉快的事情。您应该尝试使用
rs.getTimestamp
(带timeinfo)或
rs.getDate
(不带timeinfo)方法


此外,由于日期对象的层次结构相当复杂,您应该仅使用
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...
}

您的代码至少有三处错误:

  • 是一个
    字符串
    文本,因此您不能在三元表达式中使用它来分配给
    日期
    类型的变量-请改用
    null
    ,这样您就不需要三元表达式
  • ResultSet.getObject()
    返回一个
    对象
    ,该对象没有
    toDate()方法。相反,只需使用
    ResultSet.getDate()
  • 不能使用
    运算符比较
    日期
    实例。您必须使用
    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
值。这样做比让隐式转换更好。

你能告诉我们从哪里得到“结果”吗?另外,可能还有一个result.getObject(“validDate”)的示例。