Вы задаете вопрос в основном, чтобы определить, попадает ли данная дата в данный диапазон дат (т.е. неделю).
Идея этого в основном является одним из двух действий даты в качестве якоря, из которого мы вычисляем диапазон дат (начало недели до конца недели), а затем определяем, попадает ли другая дата в этот диапазон.
Итак, во-первых, мы должны вычислить диапазон дат, что-то вроде ...
Calendar cal = Calendar.getInstance();
cal.setTime(date1);
cal.set(Calendar.HOUR_OF_DAY, 0);
cal.clear(Calendar.MINUTE);
cal.clear(Calendar.SECOND);
cal.clear(Calendar.MILLISECOND);
cal.set(Calendar.DAY_OF_WEEK, cal.getFirstDayOfWeek());
Date startOfWeek = cal.getTime();
cal.add(Calendar.DATE, 6);
cal.set(Calendar.HOUR_OF_DAY, 23);
cal.set(Calendar.MINUTE, 59);
cal.set(Calendar.SECOND, 59);
cal.set(Calendar.MILLISECOND, 999);
Date endOfWeek = cal.getTime();
Который даст нам две даты, первый, начиная с «начала недели» и один 6 дней позже («конец недели»). Мы вынуждаем значения времени до крайности дней, чтобы обеспечить захват диапазона падения.
Далее нам нужно определить, равна ли другая дата или после «начала недели» и равна или до «конец недели», что-то вроде ...
(date2.equals(startOfWeek) || date2.after(startOfWeek)) && (date2.equals(endOfWeek) || date2.before(endOfWeek));
Это тогда может быть завернута в миленькой метод, чтобы называть его проще ...
public static boolean isInSameWeek(Date date1, Date date2) {
Calendar cal = Calendar.getInstance();
cal.setTime(date1);
cal.set(Calendar.HOUR_OF_DAY, 0);
cal.clear(Calendar.MINUTE);
cal.clear(Calendar.SECOND);
cal.clear(Calendar.MILLISECOND);
cal.set(Calendar.DAY_OF_WEEK, cal.getFirstDayOfWeek());
Date startOfWeek = cal.getTime();
cal.add(Calendar.DATE, 6);
cal.set(Calendar.HOUR_OF_DAY, 23);
cal.set(Calendar.MINUTE, 59);
cal.set(Calendar.SECOND, 59);
cal.set(Calendar.MILLISECOND, 999);
Date endOfWeek = cal.getTime();
System.out.println("Week starts at : " + startOfWeek);
System.out.println(" Week ends at : " + endOfWeek);
return (date2.equals(startOfWeek) || date2.after(startOfWeek)) && (date2.equals(endOfWeek) || date2.before(endOfWeek));
}
И тогда мы можем испытайте его ...
SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
try {
Date date1 = sdf.parse("30/12/2014");
Date date2 = sdf.parse("1/1/2015");
System.out.println("Is in same week " + date1 + "/" + date2 + " = " + isInSameWeek(date1, date2));
System.out.println("");
date1 = sdf.parse("27/12/2014");
System.out.println("Is in same week " + date1 + "/" + date2 + " = " + isInSameWeek(date1, date2));
} catch (ParseException exp) {
exp.printStackTrace();
}
который выводит что-то вроде ...
Week starts at : Sun Dec 28 00:00:00 EST 2014
Week ends at : Sat Jan 03 23:59:59 EST 2015
Is in same week Tue Dec 30 00:00:00 EST 2014/Thu Jan 01 00:00:00 EST 2015 = true
Week starts at : Sun Dec 21 00:00:00 EST 2014
Week ends at : Sat Dec 27 23:59:59 EST 2014
Is in same week Sat Dec 27 00:00:00 EST 2014/Thu Jan 01 00:00:00 EST 2015 = false
Необходимо ввести начальную и конечную дату недели. Затем вы можете использовать Date.before и Date.after. Вы можете использовать что-то вроде [this] (http://stackoverflow.com/questions/2937086/how-to-get-the-first-day-of-the-current-week-and-month), чтобы получить границы дат – MadProgrammer
Быстрый вопрос - будет ли время для этих дат? Если нет, вы можете просто вычесть количество дней, заданных полем DAY_OF_WEEK, и сравнить их. –
Рассматривали ли вы просмотр 'cal.get (Calendar.WEEK_OF_YEAR)'? – MadProgrammer