2013-04-17 2 views
0

Имея некоторые проблемы с реализацией этой простой задачи.Как правильно сравнить две даты?

В принципе, я хочу сравнить две даты (некоторые старые даты и новые даты). Я хочу знать, больше ли старшая дата старше х месяцев и лет.

int monthDiff = new Date().getMonth() - detail.getCdLastUpdate().getMonth(); 
int dayDiff = new Date().getDay() - detail.getCdLastUpdate().getMonth(); 
System.out.println("\tthe last update date and new date month diff is --> " + monthDiff); 
System.out.println("\tthe last update date and new date day diff is --> " + dayDiff); 

Если старшая дата 2012-09-21 00: 00: 00.0, в настоящее время она будет возвращать отрицательные числа. Мне нужно выяснить, есть ли более старая дата ТОЧНО 6 месяцев и 4 дня до новой даты(). Я думаю об использовании абсолютных значений обоих, но просто не может мозг сегодня.

Редактировать: Я знаю об joda, но я не могу использовать его. Я должен использовать Java JDK. Редактировать 2: Я попробую перечисленные методы, если все не удастся, я буду использовать Joda.

+0

Вам обязательно нужно сравнить абсолютные даты. – NeplatnyUdaj

+0

@ user2266098 с месяцем я думаю, что это нормально, используя abs(), но как насчет дня, разные месяцы имеют разное количество дней :( – iCodeLikeImDrunk

+0

Если старшая дата 21-го и сегодня 17-го числа, вы вычисляете 17 минус 21. Как вы ожидаете, что это будет положительным? – jarnbjo

ответ

6

JDK dates есть до и после того, как методов, возвращая логическое значение, чтобы выполнить свою задачу:

Date now = new Date(); 
Calendar compareTo = Calendar.getInstance(); 
compareTo.add(Calendar.MONTH, -6); 
compareTo.add(Calendar.DATE, -4); 
if (compareTo.getTime().before(now)) { 
    // after 
} else { 
    // before or equal 
} 
+0

эти функции Я знаю, проблема в том, что мне нужно знать, если старшая дата равна 6 месяцев + 4 дня назад (точно) ... – iCodeLikeImDrunk

+0

@JoeChen, тогда укажите это в своем вопросе, пожалуйста. –

+0

Я изменил свой ответ, чтобы отразить комментарий г-на Чэна – hd1

5

Лучшим способом я могу думать о том, чтобы использовать Joda-Time library. Пример с их сайта:

Days d = Days.daysBetween(startDate, endDate); 
int days = d.getDays(); 

Или количество месяцев:

Months m = Months.monthsBetween(startDate, endDate) 
int months = m.getMonths(); 

где:

DateTime startDate = new DateTime(/*jdk Date*/); 
DateTime endDate = new DateTime(/*jdk Date*/); 
+0

Я бы сам использовал joda, но OP, похоже, хочет классы JDK Date. – hd1

+0

@ hd1 Я не вижу никаких доказательств в вопросе, что ОП даже знает о jodatime –

+0

Вот почему я проголосовал за него – hd1

3

Вздох, это до меня, чтобы добавить неизбежную "использовать JodaTime" ответ.

JodaTime дает вам конкретные типы данных для всех значительных временных расстояний.

Date yourReferenceDate = // get date from somewhere 
int months = Months.monthsBetween(
         new DateTime(yourReferenceDate), 
         DateTime.now() 
      ).getMonths(); 
+0

Я также проголосовал за ваш ответ – hd1

Смежные вопросы