2012-04-12 8 views
15

Sto provando a creare un metodo che controlla se "oggi" è tra lunedì e venerdì. Per questo ottengo con questa linea 'int day = Calendar.DAY_OF_WEEK;' il giorno reale. Dopo di che compilo un ArrayList con i giorni (lunedì, martedì, Wendsday, giovedì e venerdì). Ora quando controllo se il giorno reale è nel mio ArrayList, ho impostato boolean DAY = true altrimenti ho impostato boolean DAY = false. Ho provato il metodo oggi e ieri, ma comunque imposta il booleano su falso.Controlla se DAY_OF_WEEK è tra lunedì e venerdì

Cosa è necessario modificare il funzionamento del mio codice? Troverai il codice qui sotto.

Codice

   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

Perché non è possibile controllare se il giorno è tra Calendar.MONDAY (valore 2) e Calendar.FRIDAY (valore 6)? –

+0

il DAY_OF_WEEK, deve essere uno di quei 5 giorni – safari

+1

no, è perché devi Calendar.get (Calendar.DAY_OF_WEEK); – L7ColWinters

risposta

38

Wow, è come cercare di uccidere una zanzara con una testata termonucleare :-)

Java guarantees (in 1.5) (invariato fino a 1.8 almeno) che i valori di SUNDAY attraverso SATURDAY sono contigui (da 1 a 7) quindi è una semplice questione di controllare un intervallo.

Tuttavia, DAY_OF_WEEK è non il giorno della settimana, si tratta di un numero di campo (con il valore 7) da passare al getter a recuperare il giorno della settimana. L'unica volta che lo stesso Calendar.DAY_OF_WEEK corrisponderà a un giorno effettivo sarà il sabato.

È possibile utilizzare il codice come ad esempio:

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)); 

A seguito di questo, isWeekday sarà vero se e solo se il giorno dalla myDate era Lunedi al Venerdì compreso.

+1

perché inizia da 1? Dovrebbe iniziare da 0. Questo rende più scomodo fare espressioni come 'while ((today = ++ today% 7)! = StartingPoint' – likejiujitsu

+3

@likejiujitsu: Sospetto che inizi da uno a partire da nient'altro che uber-nerd userei la frase '" zeroth giorno della settimana "' Pensa dal lato _ altro_ della recinzione, tutti noi poveri programmatori di C che devono aggiungere continuamente uno 'tm_mon' quando escono le date :-) È abbastanza facile in il tuo caso da fare 'while ((today = (today% 7) + 1)! = startingPoint)' ma, sì, devi pensarci un po '. – paxdiablo

5

int day = Calendar.DAY_OF_WEEK; dovrebbe invece essere

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

il codice corrente appena ottiene il valore della costante Calendar.DAY_OF_WEEK.

+0

corretto! Questo è importante se si vuole farlo funzionare correttamente! – cyberPrivacy

2

Questo dovrebbe fare il trucco per voi presumo.

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 logica è rotto proprio qui. DAY_OF_WEEK è una costante che identifica il tipo di dati che dobbiamo recuperare da un'istanza Calendar.

La soluzione più semplice al problema (dal Calendar.FRIDAY> ...> Calendar.MONDAY) è

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

Prima Calendar.DAY_OF_WEEK è un campo intero sarà dà sempre 7. È necessario creare un'istanza di un calendario come Calendar cal = Calendar.getInstance(); Per impostazione predefinita ti dà la data corrente nel fuso orario corrente. Quindi è possibile chiamare cal.get (Calendar.DAY_OF_WEEK); che vi darà ogni giorno tra Domenica e Sat'day

Ora potete verificare qualcosa di simile

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"); 
    } 

È possibile applicare questa logica al vostro problema !!