Используйте классы замены календаря JodaTime: http://joda-time.sourceforge.net/
Вы можете использовать до , после и 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
Удачи!
Чтобы добавить десять дней:
Date today = new Date();
Calendar cal = new GregorianCalendar();
cal.setTime(today);
cal.add(Calendar.DAY_OF_YEAR, 10);
Чтобы проверить, есть ли между двумя датами:
myDate.after(firstDate) && myDate.before(lastDate);
Управление датами и их сравнение с использованием 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).
}
Да, это действительно все , что вам нужно сделать.