Проверьте, что Дата между двумя датами в Java [дубликат]

15
задан John Topley 24 May 2010 в 10:19
поделиться

5 ответов

Используйте классы замены календаря JodaTime: http://joda-time.sourceforge.net/

5
ответ дан 1 December 2019 в 00:33
поделиться

Вы можете использовать до , после и compareTo методов класса Date .

Вот несколько примеров

http://www.roseindia.net/java/example/java/util/CompareDate.shtml

http://www.javafaq.nu/java-example-code -287.html

http://www.esus.com/javaindex/j2se/jdk1.2/javautil/dates/comparingdates.html

А вот API на Дата класс

http://java.sun.com/j2se/1.4.2/docs/api/java/util/Date.html

Удачи!

3
ответ дан 1 December 2019 в 00:33
поделиться

Вы можете найти больше ответов здесь

1
ответ дан 1 December 2019 в 00:33
поделиться

Чтобы добавить десять дней:

Date today = new Date();
Calendar cal = new GregorianCalendar();
cal.setTime(today);
cal.add(Calendar.DAY_OF_YEAR, 10);

Чтобы проверить, есть ли между двумя датами:

myDate.after(firstDate) && myDate.before(lastDate);
2
ответ дан 1 December 2019 в 00:33
поделиться

Управление датами и их сравнение с использованием java.util.Date и java.util.Calendar довольно проблематично, поэтому существует JodaTime . Ни один из ответов пока не охватывает рассматриваемое время . Сравнение может завершиться неудачно, если в датах указано время, отличное от нуля. Также неясно, хотите ли вы инклюзивное или исключительное сравнение. Большинство опубликованных на данный момент ответов предполагают исключительное сравнение (т.е. 24 мая - это , а не между 20 мая и 24 мая), в то время как на самом деле было бы разумнее сделать его включительно (т.е. 24 мая - это с 20 по 24 мая).


Одна вещь, которую я хочу знать, - это как рассчитать, какой день будет через 10 дней после сегодняшнего дня.

Для стандартного Java SE 6 API вам понадобится java.util.Calendar .

Calendar plus10days = Calendar.getInstance();
plus10days.add(Calendar.DAY_OF_YEAR, 10);

С JodaTime вы бы сделали следующее:

DateTime plus10days = new DateTime().plusDays(10);

Во-вторых, нужно проверить, находится ли одна дата между двумя другими датами. Например, предположим, что у меня есть приложение, которое показывает, какие события мне нужно сделать в следующие 10 дней (планировщик). Как теперь узнать, находится ли дата, назначенная мною событию, между сегодняшним днем ​​и датой, которая находится в 10 днях от сегодняшнего?

Теперь наступает ужасная часть с Календарем . Давайте подготовимся сначала:

Calendar now = Calendar.getInstance();
Calendar plus10days = Calendar.getInstance();
plus10days.add(Calendar.DAY_OF_YEAR, 10);
Calendar event = Calendar.getInstance();
event.set(year, month - 1, day); // Or setTime(date);

Для надежного сравнения с использованием Calendar # before () и Calendar # after () , нам нужно сначала избавиться от времени. Представьте, что сейчас 24 мая 2010 года, 9:00 утра, а дата мероприятия установлена ​​на 24 мая 2010 года без учета времени.Если вы хотите инклюзивное сравнение, вы хотите, чтобы оно возвращало истину в тот же день. Т.е. оба (event.equals (now) || event.after (now)) или -shorter, но одинаково- (! event.before (now)) должны возвращать true. Но на самом деле никто этого не делает из-за наличия времени в сейчас . Сначала вам нужно очистить время во всех экземплярах календаря, как показано ниже:

calendar.clear(Calendar.HOUR);
calendar.clear(Calendar.HOUR_OF_DAY);
calendar.clear(Calendar.MINUTE);
calendar.clear(Calendar.SECOND);
calendar.clear(Calendar.MILLISECOND);

В качестве альтернативы вы также можете сравнить только день / месяц / год.

if (event.get(Calendar.YEAR) >= now.get(Calendar.YEAR)
    && event.get(Calendar.MONTH) >= now.get(Calendar.MONTH)
    && event.get(Calendar.DAY_OF_MONTH) >= now.get(Calendar.DAY_OF_MONTH)
{
    // event is equal or after today.
}

Все очень многословно.

С JodaTime вы можете просто использовать DateTime # toLocalDate () , чтобы получить только часть даты:

LocalDate now = new DateTime().toLocalDate();
LocalDate plus10days = now.plusDays(10);
LocalDate event = new DateTime(year, month, day, 0, 0, 0, 0).toLocalDate();
if (!event.isBefore(now) && !event.isAfter(plus10days)) {
    // Event is between now and 10 days (inclusive).
}

Да, это действительно все , что вам нужно сделать.

20
ответ дан 1 December 2019 в 00:33
поделиться
Другие вопросы по тегам:

Похожие вопросы: