formatter Date ne formate la date correctement
-
10-10-2019 - |
Question
J'ai écrit ce code Java suivant pour formater la date et l'heure dans des formats spécifiques. Vous pouvez voir le dessous du code ideone .
import java.util.Calendar;
import java.util.GregorianCalendar;
import java.text.SimpleDateFormat;
class timeAndDateTransformation{
public static void main(String[] argv){
Calendar newDate = new GregorianCalendar(2009,7,1,15,20,00);
SimpleDateFormat dateFormant = new SimpleDateFormat("yyyy/MM/dd");
SimpleDateFormat timeFormant = new SimpleDateFormat("HH:mm:ss");
System.out.println(dateFormant.format(newDate.getTime()).toString());
System.out.println(timeFormant.format(newDate.getTime()).toString());
}
}
Sa me donne la sortie suivante:
2009/08/01
15:20:00
Dans cette sortie de repos tout parfaitement bien, à l'exception du mois. J'ai passé 7 un mois mais dans ce pour-matière sortie son donnant 8 comme une sortie. S'il vous plaît me point que je fais mal. Je ne suis pas très familier avec les classes de date / calendrier de java, donc faire preuve de patience.
La solution
Les mois sont basés sur 0, vous avez passé à 7 afin que décide d'Août.
Des docs pour api java.util.Date:
Un mois est représenté par un entier de 0 à 11; 0 est Janvier, 1 est Février, et ainsi de suite; ainsi 11 est Décembre.
Il est vraiment contre-intuitif pour faire fonction zéro du mois. Je pense que nous avons tous obtenu incendiés par celui-là à un moment donné.
Autres conseils
Le champ de mois en Java est basé sur zéro. GregorianCalendar.JANUARY est 0 ... etc, etc. Par conséquent, si vous voulez passer à une date dans le constructeur, ajouter un à la valeur du mois.
Si vous regardez le [JavaDoc ici] [1], ce pour vous explique.
[1]: http://download.oracle.com/javase/1.4.2/docs/api/java/util/Calendar.html#set(int , int, int)
Les humains aiment voir le premier mois (Janvier) étant 1, de sorte que est ce que SimpleDateFormat
fait.
Cependant les ordinateurs aiment voir les choses à partir de 0, et que de la façon dont GregorianCalendar
gère les month
param. Voir les constructeurs pour GregorianCalendar et Description du paramètre month
.
[Java considère mois Janvier 0.] [1] Mais lorsque vous sortie le nombre de mois avec SimpleDateFormat il utilise la norme Janvier est le système 1 mois. Donc, mois 7 est comme 8 émis.
Si vous rencontrez des problèmes avec la date et le calendrier du JDK en utilisant Joda temps , il est beaucoup plus facile
[1]: http://download.oracle.com/javase/1.4.2/docs/api/java/util/GregorianCalendar.html#GregorianCalendar(int , int, int)