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

プリミティブを比較するときlongは、普通の比較演算子を使用するだけです:

dateNow > modifiedDate

これはお勧めしませんが、 を使用したい場合はcompareTo、まず に変換してLongください:

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

compareTo メソッドはラッパー クラスの一部です。long はプリミティブ データ型です。プリミティブ データ型でメソッドを呼び出すことはできません。long を Long に変更するか、dateNow > modifiedDate のように long を直接比較します。

于 2012-06-29T17:38:36.110 に答える
1

longはプリミティブ型です。これは、オブジェクトではなく、 などの基本的なメソッドを持たないことを意味しますcompareTo。ただし、それらを比較するために数学演算を実行できます。

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

別の解決策は、オブジェクトである (大文字の L) を使用することですLong。次に、などを使用できます。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)意味的にはるかに意味のあることを行うことができます。

または、> および < 演算子を使用して、long のdateNow < modifiedDateままにしておくこともできます。dateNow

于 2012-06-29T17:39:57.993 に答える