сравнение сегодняшней даты + 30 дней с другой датой - PullRequest
3 голосов
/ 07 февраля 2010

Я пробую пример:

DateFormat df = new SimpleDateFormat("MM/dd/yyyy");
String date = "03/09/2010"; //30 days from today
Date usefullDate = df.parse(date);

Calendar todaysDatePlus30Days = Calendar.getInstance();
todaysDatePlus30Days.add(Calendar.DAY_OF_YEAR, 30);

System.out.println ("Compared Value: " +
usefullDate.compareTo(todaysDatePlus30Days.getTime()))

напечатанное значение равно -1. почему не печатается 0?

Я думаю, проблема в том, что todaysDatePlus30Days.getTime() также приносит фактическое время. тогда как время usefullDate равно 00:00:00.

Итак, следующий вопрос: как мне получить date?

Ответы [ 5 ]

3 голосов
/ 07 февраля 2010

В качестве дальнейшего комментария я бы исследовал JodaTime для всей работы с Java, связанной с датой. Он гораздо более интуитивно понятен и не страдает от проблем с многопоточностью в форматах даты / времени и в синтаксическом анализе (в отличие от стандартных библиотек Java). В настоящее время это де-факто замена для java.util.{Date,Calendar} беспорядка.

например. см. класс LocalDate и его метод plusDays().

3 голосов
/ 07 февраля 2010

Дата, которую вы анализируете, подразумевается в полночь этой даты. Тот, который вы создадите, будет текущим временем дня.

Попытка:

Calendar todayPlus30 = new GregorianCalendar() {{
  add(Calendar.DAY_OF_YEAR, 30);
  set(Calendar.HOUR_OF_DAY, 0);
  set(Calendar.MINUTE, 0);
  set(Calendar.SECOND, 0);
  set(Calendar.MILLISECOND, 0);
}};

Возможно, пара этих констант неверна, и вы можете сделать это с помощью Calendar.newInstance (), если хотите, хотя синтаксис немного другой.

1 голос
/ 07 февраля 2010

Если вы добавите следующие строки в ваш пример, вы узнаете, что полезная Дата имеет другое время

System.out.println ("" + usefullDate );
System.out.println ("" + todaysDatePlus30Days.getTime());
1 голос
/ 07 февраля 2010

Когда вы System.out.println(..) их, результат:

Tue Mar 09 00:00:00 EET 2010
Tue Mar 09 20:31:39 EET 2010

Так что они не равны - их часы отличаются. Это потому, что Calendar.getInstance() возвращает текущую дату и время.

Если вы хотите, чтобы они были равны, вам придется set(..) в полях часов, минут и секунд установить значение 0.

0 голосов
/ 07 февраля 2010

Я предлагаю использовать JodaTime, но если вы используете long для даты / времени, вы можете сделать ...

long todaysDay = System.currentTimeMillis() / MILLIS_PER_DAY;
long in30days = todaysDay + 30;
long usefulDay = usefulDate.getTime() / MILLIS_PER_DAY;
if (in30days == usefulDay) // days are the same.

Примечание: выполняет вычисления в соответствии с часовым поясом GMT + 0. Это может иметь значение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...