Calendario di Java Impostazione in modo errato
-
15-10-2019 - |
Domanda
Sto avendo qualche problema con il calendario di Java. Sto analizzando alcuni dati da un file txt, e la necessità di creare una data. Dopo il completamento del seguente codice:
tmpYear = Double.parseDouble(row[yearIndex]);
tmpMonth = Double.parseDouble(row[monthIndex]);
tmpDay = Double.parseDouble(row[dayIndex]);
if(timeIndex != -1)
tmpTime = Double.parseDouble(row[timeIndex]);
if(secondsIndex != -1)
tmpSeconds = Double.parseDouble(row[secondsIndex]);
posso eseguire il debug e vedere che le variabili sono i seguenti:
tmpYear == 2010
tmpMonth == 12
tmpDay == 30
tmpTime == 15 (Questa è l'ora del giorno)
tmpSeconds == 0
Ma quando si esegue il seguente codice:
cal.set((int)tmpYear,(int)tmpMonth,(int)tmpDay,(int)tmpTime,
(int)((tmpTime - (int)tmpTime)*100),(int)tmpSeconds);
System.out.println(cal.getTime().toString());
sto ricevendo questo per un'uscita:
Dom 30 Gen 2011 15:00:00 CST
Qualcuno può spiegare che cosa sarebbe una possibile ragione per questo? Grazie a tutti in anticipo per l'aiuto!
Soluzione
mesi sono indicizzati 0-11 invece di 1-12.
0 =
Gennaio
1 =
Febbraio
...
11 = dicembre
Usa tmpMonth = value -1
invece.
Altri suggerimenti
Credo che si avvia valore del mese a 0 invece di 1 in modo che interpreta 0 come Jan, 1 febbraio come ... e poi di nuovo come Jan 12.
Dal API:
mese - il valore utilizzato per impostare il MESE campo ora. valore del mese è 0-based. per esempio, 0 per gennaio.
Quando si imposta il campo Calendar.MONTH, che è a base zero. {Gennaio = 0 ... Dicembre = 11}
La ragione è abbastanza semplice: errore di progettazione nel API calendario. Ecco perché la JSR 310 è sulla buona strada per migliorare il supporto Java per le date.
Tecnicamente, della classe gli autori pensato che fosse bene utilizzare solo i campi statici. Quindi quello che dovete fare è quello di utilizzare il seguente:
calendar = ...
calendar.setMonth(Calendar.JANUARY);
Non pensava che la gente potrebbe avere bisogno di impostazioni dinamiche per un calendario, proprio come è necessario (e la maggior parte di noi, per quella materia).
I valori vanno da 0 mese (gennaio) a 11 (dicembre). Provare a utilizzare ((int) tmpMonth) - 1 quando si imposta il mese per ottenere dicembre.