2010-03-07 15 views
6

Ho scritto poche righe di codice che non funzionano correttamente. Perché? Sai spiegarmi?Come controllare se oggi è domenica con Java Calendar

Calendar date = Calendar.getInstance(); 

    date.set(2010, 03, 7); 

    if(date.get(Calendar.DAY_OF_WEEK) == Calendar.SUNDAY) 
     System.out.println("OK"); 
+1

Sono sorpreso che nessuno abbia suggerito di utilizzare Joda Time ancora ... È un'API molto migliore per gestire la data e l'ora. – SteveD

risposta

12

per evitare di commettere errori, è possibile utilizzare valori statici di calendario per il mese, ad esempio, :

date.set(2010, Calendar.MARCH, 7); 
5

Perché aprile 7th, 2010 non è una Domenica. Months start with zero:. 0 = gennaio, 1 = febbraio 2 = marzo, ...

(ottale Inoltre, nota a margine, hai utilizzato quando si specifica il mese [03 invece di 3] Nessuna grossa delusione fino ad arrivare a settembre , dopo di che 08 è un numero ottale valido) contano

9

mesi da zero:.

date.set(2010, 2, 7); 

Inoltre non si ottiene l'abitudine di scrivere i numeri con zeri. Questo dice a Java (e a molte altre lingue) che vuoi il numero interpretato come costante ottale (base 8), non decimale.

+1

Grazie per il downvote inutile e senza commenti! – Pointy

3

Probabilmente perché il mese è a base zero, quindi è il 7 aprile, che è un mercoledì.

3

Il valore del mese è a base 0. Java docs for set method of Calendar class.

Inoltre, se si desidera verificare se oggi (il giorno in cui il programma viene eseguito :)) è domenica, non è necessario impostare nulla, poiché il metodo getInstance restituisce un oggetto Calendario in base all'ora corrente nel fuso orario predefinito con l'impostazione internazionale predefinita:

Calendar date = Calendar.getInstance();  
//date.set(2010, 03, 7);  
if(date.get(Calendar.DAY_OF_WEEK) == Calendar.SUNDAY) 
    System.out.println("OK"); 
4

E 'questo per Euler 19?

Se è così, ecco un suggerimento, ciclo 1901-2000, da 0 a 11 mesi, a partire dai giorni 1-31, poi chiedere:

if(date.get(Calendar.DAY_OF_WEEK) == Calendar.SUNDAY && day==1) 
    counter++; 
0

Per me questo codice ha funzionato correttamente, impostare il data esatta da essa millisecondo e provare in questo modo: -

GregorianCalendar dt = new GregorianCalendar(); 
    dt.setTimeInMillis(getTimestampDDmmYYYY(date).getTime()); 
    if((dt.get(Calendar.DAY_OF_WEEK) == Calendar.SATURDAY| dt.get(Calendar.DAY_OF_WEEK) == Calendar.SUNDAY)) 
     return true; 

Grazie, Prabhat Kumar Kashyap

0

cal.DAY_OF_WEEK == cal.SATURDAY || cal.DAY_OF_WEEK == CAL.SATURDAY

dovrebbe essere abbastanza buono.