web-dev-qa-db-fra.com

Pourquoi Java le calendrier (année int, mois entier, date int)) ne renvoie pas la date correcte?

Selon doc, calendar set () 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 ???

53
masato-san

1 pour le mois est février. Le 30 février est changé au 1er mars. Vous devez définir 0 pour le mois. Le mieux est d'utiliser la constante définie dans le calendrier:

c1.set(2000, Calendar.JANUARY, 30);
103
Benoit Thiery

Les mois dans l'objet Calendrier commencent à 0

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

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

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 de février étant le 28, la sortie devrait être le 2 mars.
  • Mais l’année sélectionnée est importante, c’est 2000, ce qui signifie que le 29 février sera le 1er mars.
7
erhun