Java: как получить дату x дня в месяце (например, третий понедельник февраля 2012 г.)

Я несколько борюсь с этим.

Я хочу настроить мой календарь, скажем так:Третий понедельник февраля 2012 года. И я не нашел никакого способа сделать это с помощью Java.

Например, если я хочу установить свой календарь на Рождество 2011 года, я могу легко это сделать следующим образом:

Calendar when = Calendar.getInstance();
when.set (Calendar.MONTH, Calendar.DECEMBER);
when.set (Calendar.DAY_OF_MONTH, 25)
when.set (Calendar.YEAR, 2011);

Но я заблудился относительно того, как настроить его, скажем, на День памяти 2012, который является последним понедельником мая. Это мой код, но он явно неверен, потому что я просто не могу предположить, что последний понедельник мая будет на 4-й неделе мая этого года:

Calendar when = Calendar.getInstance ();
when.set (Calendar.DAY_OF_WEEK,Calendar.MONDAY);
when.set (Calendar.MONTH, Calendar.MAY);
when.set (Calendar.WEEK_OF_MONTH, 4)
when.set (Calendar.YEAR, 2012);

Любые предложения относительно того, как я могу программно узнать, в какой неделе мая 2012 года (в примере выше) последний понедельник? Предполагая, что я могу получить эту информацию, я смогу заставить мой код выше работать.

Мне нужно что-то, что в принципе подойдет для любых других примеров. Что-то, что может дать точный день для тех же сценариев. Примеры:

Какая дата:

3-й четверг мая 20151-й понедельник июня 2050 года4-й вторник декабря 2012 г.2-я среда июля 2000 г.

Мне действительно нужно это для моего проекта, и я уверен, что это просто, но я ломаю голову над этим без каких-либо реальных результатов, чтобы показать :) И также не мог найти ничего в сети.

Добавлено:

Хорошо, вот где у меня последний понедельник месяца:

when.set (GregorianCalendar.MONTH, GregorianCalendar.MAY);
when.set (GregorianCalendar.DAY_OF_WEEK, Calendar.MONDAY);
when.set (GregorianCalendar.DAY_OF_WEEK_IN_MONTH, -1);
when.set (Calendar.YEAR, 2012);

Но я не уверен, как бы я делал, например, секунды понедельника в том же месяце, как это?

when.set (GregorianCalendar.DAY_OF_WEEK_IN_MONTH, 2);

Какие-либо предложения?

Ответы на вопрос(8)

Ваш ответ на вопрос