Foros del Web » Programación para mayores de 30 ;) » Java »

Obtener el lunes de la semana

Estas en el tema de Obtener el lunes de la semana en el foro de Java en Foros del Web. Buenos días, dada una fecha, necesito obtener el lunes de la semana introducida, lo he intentado con el siguiente código: Código: Calendar calendarioInicioSemana = Calendar.getInstance(); ...
  #1 (permalink)  
Antiguo 04/05/2010, 02:16
 
Fecha de Ingreso: febrero-2008
Ubicación: Madrid
Mensajes: 474
Antigüedad: 16 años, 2 meses
Puntos: 1
Exclamación Obtener el lunes de la semana

Buenos días, dada una fecha, necesito obtener el lunes de la semana introducida, lo he intentado con el siguiente código:

Código:
Calendar calendarioInicioSemana = Calendar.getInstance();

calendarioInicioSemana.set(Calendar.YEAR, anioIntroducido);
calendarioInicioSemana.set(Calendar.MONTH, mesIntroducido-1);
calendarioInicioSemana.set(Calendar.DATE, diaIntroducido);
calendarioInicioSemana.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
calendarioInicioSemana.set(Calendar.HOUR_OF_DAY, 0);
calendarioInicioSemana.set(Calendar.MINUTE, 0);
calendarioInicioSemana.set(Calendar.SECOND, 0);
Pero no funciona bien, si le meto año: 2009, mes: 4, dia: 10 me obtiene el 30/03/2009 cuando tendría que sacar el 06/03/2009

Gracias.
  #2 (permalink)  
Antiguo 04/05/2010, 03:32
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 20 años, 6 meses
Puntos: 51
Respuesta: Obtener el lunes de la semana

Cita:
Calendar calendarioInicioSemana = Calendar.getInstance();
calendarioInicioSemana.set(Calendar.YEAR, 2009);
calendarioInicioSemana.set(Calendar.MONTH, 4 - 1);
calendarioInicioSemana.set(Calendar.DATE, 10);
System.err.println("Fecha: " + DateFormat.getDateInstance().format(calendarioInic ioSemana.getTime()));
calendarioInicioSemana.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
calendarioInicioSemana.set(Calendar.HOUR_OF_DAY, 0);
calendarioInicioSemana.set(Calendar.MINUTE, 0);
calendarioInicioSemana.set(Calendar.SECOND, 0);
System.err.println("Lunes de esa semana: " + DateFormat.getDateInstance().format(calendarioInic ioSemana.getTime()));
A mi me imprime:

Cita:
Fecha: 10-abr-2009
Lunes de esa semana: 06-abr-2009
Le estas pasando el mes 4, así que es Abril, no 03. Ojo a ver si no le estas pasando el numero de mes correctamente.

S!
__________________
Para obtener respuestas, pregunta de forma inteligente o si no, pregunta lo que quieras que yo contestaré lo que me dé la gana.
  #3 (permalink)  
Antiguo 04/05/2010, 03:53
 
Fecha de Ingreso: febrero-2008
Ubicación: Madrid
Mensajes: 474
Antigüedad: 16 años, 2 meses
Puntos: 1
Respuesta: Obtener el lunes de la semana

Si, le paso 3 para que me pille abril...

Lo acabo de conseguir con la siguiente ñapa (por si le vale a alguien):

Código:
Calendar calendarioInicioSemana = Calendar.getInstance();                       

                        /* Calculamos el lunes de la semana dada */
                        calendarioInicioSemana.set(bAnio, bMes-1, bDia, 0, 0, 0);

                        /* Si es domingo restamos 7 dias porque calcula la semana siguiente */
                        if (calendarioInicioSemana.get(Calendar.DAY_OF_WEEK) == Calendar.SUNDAY){
                            calendarioInicioSemana.add(Calendar.DATE, Calendar.MONDAY - calendarioInicioSemana.get(Calendar.DAY_OF_WEEK));
                            calendarioInicioSemana.add(Calendar.DATE, -7);
                        } else {
                            calendarioInicioSemana.add(Calendar.DATE, Calendar.MONDAY - calendarioInicioSemana.get(Calendar.DAY_OF_WEEK));
                        }                        
                        
                        Date primerDiaDeLaSemana = calendarioInicioSemana.getTime();
                        System.out.println(objetoSesion.formatFechaHora(primerDiaDeLaSemana));
Pero me gustaría saber como hacero bien...

Etiquetas: semana
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 04:56.