Java Calendrier Configuration de manière incorrecte
-
15-10-2019 - |
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!
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.