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!

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top