1

搜索 API 以String格式返回日期,我想将该日期与当前日期进行比较并做一些事情。我创建了一个日期对象并对其进行了解析,但在进行比较时仍然出现错误。

Calendar currentDate = Calendar.getInstance();
long dateNow = currentDate.getTimeInMillis();

String eventDate = meta.getString("startDate"); //This is the string API returns

SimpleDateFormat formatter  = new SimpleDateFormat("yyyy-MM-dd kk:mm:ss.SSS");
Date date = formatter.parse(eventDate);
long modifiedDate= date.getTime();

if (dateNow.compareTo(modifiedDate)>0) {
    //Do Something
}                            

我得到的错误是:

Cannot invoke compareTo(long) on the primitive type long

谢谢。

4

4 回答 4

6

比较原始longs 时,只需使用普通比较运算符:

dateNow > modifiedDate

不建议这样做,但如果要使用compareTo,请先转换为Long

Long.valueOf(dateNow).compareTo(Long.valueOf(modifiedDate)) > 0
于 2012-06-29T17:42:51.127 回答
1

compareTo 方法是包装类的一部分,long 是原始数据类型 - 您不能在原始数据类型上调用方法。将 long 更改为 Long 或直接比较 long,如 dateNow > modifiedDate

于 2012-06-29T17:38:36.110 回答
1

long是一个原始类型,这意味着它不是一个对象,也没有基本的方法,比如compareTo等。你可以执行数学运算来比较它们:

if (dateNow - modifiedDate > 0) /* dateNow is later than modifiedDate */

另一种解决方案是使用Long(capital L) 这一个对象。然后你可以使用compareTo,等等。

于 2012-06-29T17:39:59.933 回答
-2

compareTo是一种方法。它不是为原始类型定义的long。它为 Date 类定义的。

Date dateNow = currentDate.getTime(); // instead of getTimeInMillis()
...
if (dateNow.compareTo(date)) { // this will now work

如果它们都是 Date 对象,您可以这样做dateNow.before(date)在语义上更有意义。

或者,您可以使用 > 和 < 运算符,dateNow < modifiedDate如果您离开dateNow,则执行 long。

于 2012-06-29T17:39:57.993 回答