2010-10-08 24 views
10

Utilizando Calendar Puedo obtener la semana, el año y todos los detalles para el día actual. ¿Cómo puedo navegar a un día particular en esa semana?Java: Obtenga cualquier día en una semana del Calendario

Diga, calendar.get(Calendar.DAY_OF_WEEK); devuelve 3, lo que significa un martes. Ahora, quiero ir a decir el viernes de esa semana o cualquier otro día de esa semana. ¿Cómo puedo hacer eso?

Gracias por sus respuestas. Creo que necesito aclarar el escenario. Básicamente, estoy intentando desactivar las alertas por correo electrónico en mi sistema durante el período especificado. puedo obtener valores como: disableStart = "Viernes-19: 00" disableEnd = "Domingo-19: 00"

Ahora, necesito para verificar si el correo electrónico se debe enviar en un momento determinado. p. si hoy = jueves en cualquier momento, envíe un correo electrónico al pero, si hoy = sábado, cualquier momento no puede enviarse según los valores anteriores.

+0

Compruebe la API de DateFormat. Podría ayudar. Aunque no estoy seguro –

+0

Posible duplicado de [Java: obtener el valor actual del Día de la semana] (http://stackoverflow.com/questions/2427085/java-getting-current-day-of-the-week-value) –

+0

No soy del todo entender el requisito funcional. Navega a un día? ¿Huh? – BalusC

Respuesta

25

Si entiendo correctamente, puede utilizar el método Calendar.set (Field, value).

SimpleDateFormat f = new SimpleDateFormat("dd-MM-yyyy"); 
Calendar c = Calendar.getInstance(); 
System.out.println(c.get(Calendar.DAY_OF_WEEK)); 
System.out.println(f.format(c.getTime())); 
c.set(Calendar.DAY_OF_WEEK, Calendar.TUESDAY); 
System.out.println(c.get(Calendar.DAY_OF_WEEK)); 
System.out.println(f.format(c.getTime())); 

produce la salida

6 
08-10-2010 
3 
05-10-2010 
+0

Editado para incluir un SimpleDateFormat para mostrar el cambio del día de la semana. –

2

cal.set(Calendar.DAY_OF_WEEK, Calendar.FRIDAY);

6
Calendar c = Calendar.getInstance(); 
Date date = new Date(); 
c.setTime(date); 
System.out.println("Today: " + c.getTime()); 
c.setTime(date); 
c.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY); 
System.out.println("MONDAY: " + c.getTime()); 
c.setTime(date); 
c.set(Calendar.DAY_OF_WEEK, Calendar.TUESDAY); 
System.out.println("TUESDAY: " + c.getTime()); 
c.setTime(date); 
c.set(Calendar.DAY_OF_WEEK, Calendar.WEDNESDAY); 
System.out.println("WEDNESDAY: " + c.getTime()); 
c.setTime(date); 
c.set(Calendar.DAY_OF_WEEK, Calendar.THURSDAY); 
System.out.println("THURSDAY: " + c.getTime()); 
c.setTime(date); 
c.set(Calendar.DAY_OF_WEEK, Calendar.FRIDAY); 
System.out.println("FRIDAY: " + c.getTime()); 
c.setTime(date); 
c.set(Calendar.DAY_OF_WEEK, Calendar.SATURDAY); 
System.out.println("SATURDAY: " + c.getTime()); 
c.setTime(date); 
c.set(Calendar.DAY_OF_WEEK, Calendar.SUNDAY); 
System.out.println("SUNDAY: " + c.getTime()); 

Da:

Today: Fri Oct 08 15:45:14 CEST 2010 
MONDAY: Mon Oct 04 15:45:14 CEST 2010 
TUESDAY: Tue Oct 05 15:45:14 CEST 2010 
WEDNESDAY: Wed Oct 06 15:45:14 CEST 2010 
THURSDAY: Thu Oct 07 15:45:14 CEST 2010 
FRIDAY: Fri Oct 08 15:45:14 CEST 2010 
SATURDAY: Sat Oct 09 15:45:14 CEST 2010 
SUNDAY: Sun Oct 10 15:45:14 CEST 2010 

Qué costuras en el sentido de que, al menos en mi sistema, las semanas comienza el lunes.

+0

Gracias Maurice, esto era exactamente lo que estaba buscando. –

2

Gracias a Kevin y Maurice por las respuestas. Realmente me dieron el punto de partida.

Terminé con este código de prueba, en caso de que ayude a alguien.

private static Date getTimeForAnyDayInWeek(int nDay, int nHour, int nMin) 
{ 
    Calendar c = Calendar.getInstance(); 
    c.setFirstDayOfWeek(Calendar.MONDAY); 
    Date date = Calendar.getInstance().getTime(); 
    c.setTime(date); 
    c.set(Calendar.DAY_OF_WEEK, nDay); 
    c.set(Calendar.HOUR_OF_DAY, nHour); 
    c.set(Calendar.MINUTE, nMin); 
    return c.getTime(); 
} 

public static void main(String[] args) 
{ 
    Date start = getTimeForAnyDayInWeek(6, 19, 00); 
    Date end = getTimeForAnyDayInWeek(8, 19, 00); 
    Date c = new Date(); 

    if (start.before(c) && c.before(end)) 
     System.out.println("BLOCK"); 
    else 
     System.out.println("SEND"); 
} 

Gracias, Anubhav

2

Este es un ejemplo perfecto de por qué jodatime es tan bueno, aquí está mi código similar

DateTime dt = new DateTime(); //current datetime, jodatime format 
    DateTime fridayLastWeek = dt.minusWeeks(1).dayOfWeek().setCopy("Friday"); 
    Date convertedtorubbishdateformat = fridayLastWeek.toDate(); 

Solía ​​perder tanto tiempo estilo autoservicio que Java Standard fecha/calendario. Luego conseguí jodatime, no lo lamentarás, al parecer se usará como parte de java estándar en el futuro. No me molesté en tirar la jarra durante años, desearía haber hecho, no te arrepentirás.

Cuestiones relacionadas