Pourquoi le calendrier Java défini (int année, int mois, date int) ne retourne pas la date correcte?

Selon doc, l’ensemble de calendrier () est:

http://docs.oracle.com/javase/1.5.0/docs/api/java/util/Calendar.html#set%28int,%20int,%20int%29

set(int year, int month, int date) Sets the values for the calendar fields YEAR, MONTH, and DAY_OF_MONTH. 

code:

 Calendar c1 = GregorianCalendar.getInstance(); c1.set(2000, 1, 30); //January 30th 2000 Date sDate = c1.getTime(); System.out.println(sDate); 

sortie:

 Wed Mar 01 19:32:21 JST 2000 

Pourquoi ce n’est pas le 30 janvier ???

1 pour le mois est février. Le 30 février est remplacé par le 1er mars. Vous devez définir 0 pour le mois. Le mieux est d’utiliser la constante définie dans Calendar:

 c1.set(2000, Calendar.JANUARY, 30); 

Les mois dans l’object Calendrier commencent à partir de 0

 0 = January = Calendar.JANUARY 1 = february = Calendar.FEBRUARY 

La date sélectionnée sur l’exemple est intéressante. Exemple de bloc de code est:

 Calendar c1 = GregorianCalendar.getInstance(); c1.set(2000, 1, 30); //January 30th 2000 Date sDate = c1.getTime(); System.out.println(sDate); 

et sortie Wed Mar 01 19:32:21 JST 2000 .

Quand j’ai lu l’exemple pour la première fois, je pense que la sortie est fausse mais c’est vrai 🙂

  • Calendar.Month commence à 0 donc 1 signifie février.
  • Le dernier jour du mois de février est le 28, donc la sortie devrait avoir lieu le 2 mars.
  • Mais l’année choisie est importante, c’est 2000, ce qui signifie que le 29 février, le résultat devrait être le 1er mars.