Question

Je vais avoir des problèmes avec le calendrier de Java. Je l'analyse des données d'un fichier txt, et la nécessité de créer une date. Après l'achèvement du code suivant:

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]);

Je peux déboguer et de voir que les variables sont les suivantes: tmpYear de 2010
tmpMonth de 12
tmpDay de 30
tmpTime == 15 (Ceci est l'heure de la journée)
tmpSeconds == 0

Mais lorsque vous exécutez le code suivant:

cal.set((int)tmpYear,(int)tmpMonth,(int)tmpDay,(int)tmpTime,
            (int)((tmpTime - (int)tmpTime)*100),(int)tmpSeconds);
System.out.println(cal.getTime().toString());

Je reçois cela pour une sortie:
Dim 30 janvier 15:00:00 CST 2011

Quelqu'un peut-il expliquer ce qu'est une raison possible serait? Merci à vous tous à l'avance pour l'aide!

Était-ce utile?

La solution

mois sont indexés 0-11 au lieu de 1-12.
0 = Janvier
1 = Février
...
11 = Décembre
Utilisez tmpMonth = value -1 à la place.

Autres conseils

Je crois à 0 au lieu de 1 de mises en valeur du mois de sorte qu'il interprète 0 comme Jan, 1 février ... puis Jan à nouveau comme 12.

De l'API:

  

mois - la valeur utilisée pour définir la   champ de temps MOIS. valeur du mois est   Base 0. par exemple, 0 pour Janvier.

Lorsque vous définissez le champ Calendar.MONTH, il est basé sur zéro. {Janvier = 0 ... Décembre = 11}

La raison est assez simple: défaut de conception dans l'API Calendar. Voilà pourquoi le JSR 310 est sur son chemin afin d'améliorer le support java pour les dates.

Techniquement, les auteurs de la classe a pensé qu'il était bon d'utiliser des champs statiques uniquement. Donc ce que vous devez faire est d'utiliser ce qui suit:

calendar = ...
calendar.setMonth(Calendar.JANUARY);

Ils ne pensaient pas que les gens pourraient avoir besoin les paramètres dynamiques à un calendrier, comme vous avez besoin (et la plupart d'entre nous, pour que les questions).

Les valeurs de mois vont de 0 (Janvier) à 11 (Décembre). Essayez d'utiliser ((int) tmpMonth) - 1 lors du réglage du mois pour obtenir Décembre.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top