2014-11-12 2 views
0

Я пишу сценарий приложения, где необходимо совместить между двумя датами, если есть такие же или нет, и что я пытаюсь достичь с помощью Date.compareTo(). Но он никогда не возвращает 0, как сказал API за равные даты.Date.compareTo (Date) не работает

Я получаю эти даты от Caledar.getTime(), но он никогда не

Я проверил с печатью и к дате объекту и даже они возвращаются тем же строка.

Sat Nov 15 14:17:41 GMT+05:30 2014, Sat Nov 15 14:17:41 GMT+05:30 2014 

Любое предложение, как проверить объект даты, если они равны или нет.

+1

вы проверить, если миллисекунды одинаковы? –

+0

установите обе свои даты в секундах и миллисекундах до нуля. –

+1

напечатайте обе даты, используя date.getTime() и посмотрите разницу. –

ответ

5

Я думаю, вы забыли проверить, совпадают ли даты миллисекунды.

Это исходный код метода compareTo.

public int compareTo(Date anotherDate) { 
    long thisTime = getMillisOf(this); 
    long anotherTime = getMillisOf(anotherDate); 
    return (thisTime<anotherTime ? -1 : (thisTime==anotherTime ? 0 : 1)); 
} 

Как вы можете видеть, этот метод сравнивает две даты, используя миллисекунды как «временной шаг».


Код для старого API:

Этот код проверяет, если два дня то же самое. (Без часов, минут, секунд и миллисекунд)

Date date1; //Your initial date 
Date date2; //Your initial second date 

//Remove hours, minutes, seconds and milliseconds by creating new "clean" Date objects 
Date compare1 = new Date(date1.getYear(), date1.getMonth(), date1.getDay()); 
Date compare2 = new Date(date2.getYear(), date2.getMonth(), date2.getDay()); 

if(compare1.compareTo(compare2) == 0){ 

} 

Но я предлагаю не использовать Дата для этой задачи. Поскольку getYear, getMonth и т.д. методы устарели, я предлагаю вам взглянуть на новые API, как GregorianCalendar и Calendar


Код для нового API

Этот код проверяет, если два дня то же самое, включая часов и минут. Но без секунд и миллисекунд.

Date date1; 
Date date2; 

Calendar compareCalendar1 = Calendar.getInstance(); 
Calendar compareCalendar2 = Calendar.getInstance(); 
compareCalendar1.setTime(date1); 
compareCalendar2.setTime(date2); 


//Set for both calendars the seconds and milliseconds to 0 
compareCalendar1.set(Calendar.MILLISECOND, 0); 
compareCalendar1.set(Calendar.SECOND, 0); 

compareCalendar2.set(Calendar.MILLISECOND, 0); 
compareCalendar2.set(Calendar.SECOND, 0); 

if(compareCalendar1.compareTo(compareCalendar2) == 0){ 

} 
+0

yes Rofl Я пробовал то же самое, и он работает. Но так как это создать Date Constructor, он устарел. Также должен быть другой способ его получить. – CoDe

+0

@Shubh см. Отредактированный ответ –

+0

этот способ сравнения не работает..Я проверил его. – CoDe

1

Попытка понять сравнить сценарий:

Date date1 = Calendar.getInstance().getTime(); 
Date date2 = Calendar.getInstance().getTime(); 

date1.compareTo(date2) >> -1 

И

Date date3 = Calendar.getInstance().getTime(); 
Date date4 = date3; 

date3.compareTo(date4) >> 0 
Смежные вопросы