Tengo un poco de problemas con esto.Java: cómo obtengo la fecha de x día en un mes (por ejemplo, el tercer lunes de febrero de 2012)
Quiero fijar mi calendario a digamos: tercer lunes de febrero de 2012. Y no encontré ninguna manera de hacer esto utilizando Java.
Por ejemplo, si quería establecer mi calendario para la Navidad de 2011, que puedo hacer esto fácilmente, de esta manera:
Calendar when = Calendar.getInstance();
when.set (Calendar.MONTH, Calendar.DECEMBER);
when.set (Calendar.DAY_OF_MONTH, 25)
when.set (Calendar.YEAR, 2011);
Pero estoy perdido en cuanto a cómo configurarlo para digamos Memorial Day 2012, que es el último lunes de mayo. Este es mi código, pero es obviamente erróneo, porque simplemente no puede asumir que el último lunes de mayo estará en la cuarta semana de mayo de ese año:
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);
Cualquier sugerencia en cuanto a cómo puedo encontrar programáticamente fuera, ¿en qué semana del mes de mayo de 2012 (en el ejemplo anterior) es el último lunes? Suponiendo que pueda obtener esa información, debería poder hacer que mi código anterior funcione.
Necesito algo que básicamente funcionaría para cualquier otro ejemplo. Algo que podría dar un día exacto para los mismos escenarios. Ejemplos:
¿Qué fecha es:
- jueves 3 de mayo, el año 2015
- lunes 1 de junio para el año 2050
- martes 4 de diciembre 2012 para
- miércoles 2 de julio de 2000
Realmente necesito esto para mi proyecto y estoy seguro de que es simple, pero me estoy rompiendo la cabeza en esto sin ningún resultado real para mostrar :) Y tampoco pude encontrar nada en la red.
Agregado:
Ok, aquí es donde tengo para el último lunes de un mes:
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);
Pero no estoy seguro de cómo iba a ir haciendo, por ejemplo, segundos el lunes en el mismo mes, así?
when.set (GregorianCalendar.DAY_OF_WEEK_IN_MONTH, 2);
¿Alguna sugerencia?
Me gusta mucho este código, en realidad funciona. Simplemente no sé cómo especificar el último miércoles (en este caso) en el mes. Puede usted ayudar. – jjj
Estoy intentando algo así como: LocalDate d = getNDayOfMonth (DateTimeConstants.WEDNESDAY, -1, 10, 2011); Pero no funciona. – jjj
@jjj: para obtener el último miércoles del mes requiere un ligero cambio, he añadido un método para eso. También puede usar el primer método: por ejemplo, para obtener el último miércoles de octubre de 2001, obtener el primer miércoles de noviembre de 2011 y restar una semana. – leonbloy