2012-06-29 2 views
1

API поиска возвращает дату в формате String, я хочу сравнить эту дату с текущей датой и сделать что-то. Я создал объект даты и проанализировал его, но все еще получаю ошибку, когда делаю сравнение.Сравнение строки date to current long time

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 

Спасибо.

+0

Что такое ОШИБКА, разместите свой логарифм – rajpara

+0

Не могли бы вы сообщить подробности об ошибке? Вы получаете ошибку компиляции или исключение времени выполнения? –

+0

Есть ли причина, по которой вам придется переходить на 'long' вместо использования методов 'before' и' after', определенных 'java.util.Date'? –

ответ

5

При сравнении примитивных long S просто использовать оператор сравнения ваниль:

dateNow > modifiedDate 

Это не рекомендуется, но если вы хотите использовать compareTo, сначала преобразовать в Long:

Long.valueOf(dateNow).compareTo(Long.valueOf(modifiedDate)) > 0 
+1

Да, только потому, что вы * можете * сделать что-то не значит, что вам нужно. И да, я не спустил вниз ... ведь вы предупредили. – davidcesarino

1

compareTo метод является частью классов-оболочек, long - примитивный тип данных - вы не можете вызвать метод на примитивном типе данных. Либо изменить длинный на длинный, либо сравнить долго, как dateNow> modifiedDate

-2

compareTo - это метод. Он не определен для примитивного типа long. Он -, определенный для класса Date.

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

Если они оба Дата объекты, вы можете сделать dateNow.before(date), что делает гораздо больше смысла семантически.

В качестве альтернативы вы можете использовать операторы> и < и сделать dateNow < modifiedDate, если оставить dateNow длинным.

+0

Если вы используете downvote, пожалуйста, укажите причину. Благодарю. –

+0

Примитивы не относятся к типу 'Object', поэтому они не являются вашими типичными объектами (академическими, я знаю). Одним из самых основных последствий является то, что у них нет собственных методов. Поскольку 'dateNow' имеет примитивный тип' long', этот код не может даже компилироваться ... и когда вы предлагаете код здесь на этом сайте, люди очень чувствительны, чтобы потребовать, чтобы ваш код, по крайней мере, , не имеют вопиющих ошибок на них, как это ... когда есть сомнения, не спешите просто пытаться получить upvotes и зеленые клещи. – davidcesarino

+0

@ DavidCesarino- в приведенном выше коде я упомянул, что если OP изменил датуNow на объект * Date *, он/она мог бы использовать метод compareTo? Это уже не так давно. Календарь getTime() возвращает Date, not long. (Возможно, вы не обновились, я изменил сообщение на 10 минут назад, когда понял, что OP установил dateNow как длинную, а не дату.) –

1

long примитивный тип, который означает, что он не является объектом и не имеет основные методы, как compareTo и т.д. Вы можете выполнять математические операции, чтобы сравнить их, хотя:

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

Другим решением является использование Long (капитал L), который является a объектом. Затем вы можете использовать compareTo и т.д.