Java Calendar restituisce mese sbagliato
Voglio memorizzare una data in un oggetto Calendar, in questo modo:
Calendar cal = Calendar.getInstance();
cal.setTimeZone(TimeZone.getTimeZone("UTC"));
cal.set(Calendar.YEAR, 2017);
cal.set(Calendar.MONTH, Calendar.JUNE);
cal.set(Calendar.DAY_OF_YEAR, 26);
cal.set(Calendar.HOUR_OF_DAY, 9);
cal.set(Calendar.MINUTE, 0);
cal.set(Calendar.SECOND, 0);
cal.set(Calendar.MILLISECOND, 0);
Tutti i valori sono impostati correttamente, tranne il mese e se chiamo cal.getTime()
restituisce:
Thu Jan 26 10:00:00 CET 2017
Cosa sto facendo di sbagliato?
2 answers
Quando si utilizza DAY_OF_YEAR
si imposta il giorno numerico dell'anno corrente.
DAY_OF_YEAR Numero di campo per get e set che indica il numero del giorno entro l'anno in corso.
Questo sovrascrive tutte le configurazioni sensibili come mese o anno (all'anno corrente e al mese del giorno del numero).
Quindi invece di usare DAY_OF_YEAR
puoi usare DAY_OF_MONTH
che sembra è quello che stai cercando, questo imposta il giorno del mese che hai impostato prima.
DAY_OF_MONTH Numero di campo per get e set che indica il giorno del mese. Questo è sinonimo di DATA. Il primo giorno del mese ha valore 1.
Quindi la configurazione che stai cercando in modo definito sembra essere come successivo:
Calendar cal = Calendar.getInstance();
cal.setTimeZone(TimeZone.getTimeZone("UTC"));
cal.set(Calendar.YEAR, 2017);
cal.set(Calendar.MONTH, Calendar.JUNE);
cal.set(Calendar.DAY_OF_MONTH , 26);
cal.set(Calendar.HOUR_OF_DAY, 9);
cal.set(Calendar.MINUTE, 0);
cal.set(Calendar.SECOND, 0);
cal.set(Calendar.MILLISECOND, 0);
Quindi quando chiami getTime otterrai:
Lun giu 26 11:00:00 CEST 2017
Come menzionato in " Perché Java Calendar set(int year, int month, int date) non restituisce la data corretta?" questo è un modo semplice per inizializzare un oggetto Calendar.
Calendar cal = Calendar.getInstance();
cal.setTimeZone(TimeZone.getTimeZone("UTC"));
cal.set(2017, Calendar.JUNE, 26, 9, 0, 0);
cal.set(Calendar.MILLISECOND, 0);
System.out.println(cal.getTime());
Lun giu 26 11:00:00 CEST 2017