Sono di fronte a un comportamento strano di java.util.Calendar
.Comportamento strano del calendario
Il problema è quando aggiungo una chiamata di metodo Calendar#getTime()
in mezzo solo di quello che ricevo risultato corretto, ma quando ho direttamente ottengo il Dates
della settimana senza chiamare Calendar#getTime()
si riferisce alla prossima settimana invece di corrente settimana.
Si prega di considerare seguente frammento di codice:
public class GetDatesOfWeek {
public static void main(String[] args) {
SimpleDateFormat sdf = new SimpleDateFormat("dd-MM-yyyy");
Calendar cal = Calendar.getInstance();
cal.set(1991, Calendar.DECEMBER, 11);
//System.out.println(cal.getTime());//LINE NO : 14
for(int i = Calendar.SUNDAY; i <= Calendar.SATURDAY; i++) {
cal.set(Calendar.DAY_OF_WEEK, i);
Date date = cal.getTime();
System.out.println(sdf.format(date));
}
}
}
Quando ho rimuovere il commento la linea non 14
ottengo seguente output:
Wed Dec 11 07:38:06 IST 1991
08-12-1991
09-12-1991
10-12-1991
11-12-1991
12-12-1991
13-12-1991
14-12-1991
Ma quando io commento che la linea ed eseguire il codice ottengo seguente risultato.
15-12-1991
16-12-1991
17-12-1991
18-12-1991
19-12-1991
20-12-1991
21-12-1991
Si noti che in entrambi i casi il mese e l'anno campi sono propri, ma la data di inizio è stata spostata 08-12-1991
-15-12-1991
per me 08-12-1991
è corretta.
La mia domanda:
- perché sto ottenendo diverse date di settimana in questi due casi?
- Perché questo tipo di funzionalità è fornito in Java?
State facendo funzionare i due test in modo indipendente o avete il codice che viene eseguito loro uno dopo l'altro in un'unica esecuzione? – Jason