Попробуйте установить DAY_OF_WEEK
тоже:
final GregorianCalendar calendar = new GregorianCalendar(Locale.GERMANY);
calendar.clear();
calendar.set(Calendar.YEAR, 2012); // set to 2012
calendar.set(Calendar.WEEK_OF_YEAR, 20); // set to week number 20
calendar.set( Calendar.DAY_OF_WEEK, Calendar.MONDAY ); //set day to monday
calendar.setTimeZone(TimeZone.getTimeZone("Europe/Berlin")); // set time zone
SimpleDateFormat sdf = new SimpleDateFormat("dd.MM.yy"); // german format
System.out.println(sdf.format(calendar.getTime())); // return date
Возвращает 14.05.12, 16.05.11 и 17.05.10 для меня.
Редактировать:
Таким образом, для 2012 года его +2, 2011 год является правильным, а 2010 год равен -1.
Если я правильно понимаю, вы получите 16.05.10, 16.05.11 и 16.05.12, верно?Это означает, что часть календаря используется повторно.Вы, случайно, тестировали подряд, начиная с 2011 года?Если это так, то изменение года без указания clear()
и т. Д. Сохранит ранее рассчитанную дату.