2012-04-12 15 views
15

Estoy intentando crear un método que compruebe si "hoy" es de lunes a viernes. Para esto me sale con esta línea 'int day = Calendar.DAY_OF_WEEK;' el día real. Después de eso, llené un ArrayList con los días (lunes, martes, miércoles, jueves y viernes). Ahora cuando compruebo si el día real está en mi ArrayList, configuro boolean DAY = true, si no configuro boolean DAY = false. Probé el Método hoy y ayer, pero siempre establece el valor booleano en falso.Compruebe si DAY_OF_WEEK es de lunes a viernes

¿Qué necesito cambiar para que mi código funcione? Encontrarás el código aquí.

Código

   int day = Calendar.DAY_OF_WEEK; 
       ArrayList<Integer> daylist = new ArrayList<Integer>(); 
       daylist.add(Calendar.MONDAY); 
       daylist.add(Calendar.TUESDAY); 
       daylist.add(Calendar.WEDNESDAY); 
       daylist.add(Calendar.THURSDAY); 
       daylist.add(Calendar.FRIDAY); 

       if (daylist.contains(day)){ 
        DAY = true; 
       }else{ 
        DAY = false; 
       } 
+0

¿Por qué no puede simplemente verificar si el día está entre Calendar.MONDAY (valor 2) y Calendar.VIDIA (valor 6)? –

+0

el DAY_OF_WEEK, tiene que ser uno de esos 5 días – safari

+1

no, es porque tiene que Calendar.get (Calendar.DAY_OF_WEEK); – L7ColWinters

Respuesta

38

Vaya, es como tratar de matar a un mosquito con una cabeza termonuclear :-)

Java guarantees (in 1.5) (sin cambios hasta 1.8 al menos) que los valores de SUNDAY través SATURDAY son contiguos (1 a 7) así que es una simple cuestión de verificar un rango.

Sin embargo, DAY_OF_WEEK es no el día de la semana, es un número de campo (con el valor 7) para ser pasado al comprador a recuperar el día de la semana. La única vez que coincida Calendar.DAY_OF_WEEK con un día real será los sábados.

Puede usar un código como:

Calendar myDate = Calendar.getInstance(); // set this up however you need it. 
int dow = myDate.get (Calendar.DAY_OF_WEEK); 
boolean isWeekday = ((dow >= Calendar.MONDAY) && (dow <= Calendar.FRIDAY)); 

Después de esto, isWeekday será cierto si y sólo si el día de myDate era de lunes a viernes, ambos inclusive.

+1

¿por qué comienza en 1? Debería comenzar en 0. Esto hace que sea más incómodo hacer expresiones como 'while ((today = ++ today% 7)! = StartingPoint' – likejiujitsu

+3

@likejiujitsu: sospecho que comienza en uno ya que nadie más que uber-nerds usaría la frase "zeroth day of the week". Piénselo desde el otro lado de la valla, todos los pobres codificadores C que tienen que agregar continuamente uno el 'tm_mon' al dar salida a las fechas :-) Es bastante fácil en su caso para hacer 'while ((today = (today% 7) + 1)! = startingPoint)' pero, sí, tiene que pensarlo un poco. – paxdiablo

5

int day = Calendar.DAY_OF_WEEK; debe ser en cambio

Calendar cal; // The calendar object 
....your other code for getting the date goes here.... 
int day = cal.get(Calendar.DAY_OF_WEEK); 

su código actual sólo se pone el valor de la constante de Calendar.DAY_OF_WEEK.

+0

¡Correcto! ¡Esto es importante si quiere que funcione correctamente! – cyberPrivacy

2

Esto debería hacer el truco para usted, supongo.

int day = cal.get(Calendar.DAY_OF_WEEK); 
if (day >= Calendar.MONDAY && day <= Calendar.FRIDAY){ 
    DAY = true; 
}else{ 
    DAY = false; 
} 
1
int day = Calendar.DAY_OF_WEEK; 

La lógica se rompe aquí. DAY_OF_WEEK es una constante que identifica qué tipo de datos necesitamos recuperar de una instancia de Calendar.

La solución más sencilla a su problema (ya que Calendar.FRIDAY> ...> Calendar.MONDAY) es

Calendar now = Calendar.getInstance(); 
int day = now.get(Calendar.DAY_OF_WEEK); 
if (day >= Calendar.MONDAY && day <= Calendar.FRIDAY) 
    // do something 
1

Primera Calendar.DAY_OF_WEEK es un campo entero será siempre le da 7. Es necesario crear una instancia de un calendario como Calendar cal = Calendar.getInstance(); Por defecto, te da la fecha actual en la zona horaria actual. Luego puede llamar a cal.get (Calendar.DAY_OF_WEEK); que le dará cualquier día entre el domingo y Sat'day

Ahora puede ver algo como esto

if(cal.get(Calendar.DAY_OF_WEEK) == Calendar.SUNDAY || cal.get(Calendar.DAY_OF_WEEK) == Calendar.SATURDAY) { 
     System.out.println("Weekend"); 
    } else { 
     System.out.println("Weekday"); 
    } 

Puede aplicar esta lógica a su problema !!

Cuestiones relacionadas