Я пытаюсь создать недельный календарь, который похож на это: http://dhtmlx.com/docs/products/dhtmlxScheduler/sample_basic.html
Как я могу вычислять каждую неделю дату? Например, эта неделя:
В понедельник - в воскресенье
7 июня, 8 июня, 9 июня, 10 июня, 11 июня, 12 июня, 13 июня
Думаю, это делает то, что вы хотите:
// Get calendar set to current date and time
Calendar c = Calendar.getInstance();
// Set the calendar to monday of the current week
c.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
// Print dates of the current week starting on Monday
DateFormat df = new SimpleDateFormat("EEE dd/MM/yyyy");
for (int i = 0; i < 7; i++) {
System.out.println(df.format(c.getTime()));
c.add(Calendar.DATE, 1);
}
Первый день этой недели.
Calendar c = Calendar.getInstance();
while (c.get(Calendar.DAY_OF_WEEK) != Calendar.MONDAY) {
c.add(Calendar.DATE, -1);
}
Вы можете развить это: следующий код печатает первую и последнюю даты каждой недели в течение 15 недель с этого момента.
Calendar c = Calendar.getInstance();
c.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
for(int i=0; i<15; i++)
{
System.out.print("Start Date : " + c.getTime() + ", ");
c.add(Calendar.DAY_OF_WEEK, 6);
System.out.println("End Date : " + c.getTime());
c.add(Calendar.DAY_OF_WEEK, 1);
}
Если вы знаете, какой сейчас день (пятница) и текущую дату (11 июня), вы можете рассчитать другие дни на этой неделе.
Я рекомендую вам использовать Joda Библиотеку времени. Класс григорианского календаря имеет методы weekOfWeekyear и dayOfWeek.
Алгоритм, который вы ищете (вычисление дня недели для любой заданной даты) - это "конгруэнтность Зеллера". Вот реализация на Java:
http://technojeeves.com/joomla/index.php/free/57-zellers-congruence