Pourquoi Java Calendrier set(int année, int mois, int jour) ne retourne pas la bonne date?


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 Jan 30 ???

Author: Tuan Dang, 2011-02-08

3 answers

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);
 98
Author: Benoit Thiery, 2011-02-08 10:40:20

Les mois dans l'objet Calendrier commencent à partir de 0

0 = January = Calendar.JANUARY
1 = february = Calendar.FEBRUARY
 19
Author: fmucar, 2011-02-08 10:48:20

La date sélectionnée dans 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 à partir de 0 donc 1 signifie février.
  • Le dernier jour de février est le 28, la sortie devrait donc être le 2 mars.
  • Mais l'année choisie est importante, c'est 2000, ce qui signifie le 29 février, donc le résultat devrait être le 1er mars.
 6
Author: erhun, 2018-02-14 09:24:52