Java GregorianCalendar ¿Qué estoy haciendo mal? ¿Fecha equivocada?
-
05-10-2019 - |
Pregunta
Hola tengo un problema con GregorianCalendar.
Lo que está mal allí?
Como resultado es 06/01/2010 y no 2010/05/31?
package test;
import java.util.Calendar;
import java.util.GregorianCalendar;
public class Main {
public static void main(String[] args) {
Calendar cal = new GregorianCalendar(2010, 5, 31);
System.out.println(cal.get(Calendar.YEAR) + "/" + cal.get(Calendar.MONTH) + "/" + cal.get(Calendar.DAY_OF_MONTH));
}
}
Solución
Java cuenta desde 0 meses, por lo que 5 es junio. Siempre es más seguro utilizar las constantes. Así que me gustaría escribir:
Calendar cal = new GregorianCalendar(2010, Calendar.MAY, 31);
Lo mismo se aplica a su calendario de impresión a cabo. Si lo hace cal.get(Calendar.MONTH)
se obtiene 6 significando julio.
Otros consejos
Esto se debe a varios meses está basado en cero, por lo que están tratando de establecer 31o de junio, pero junio es de sólo 30 días, por lo que se convierte al 1 de julio.
toadd a lo que las respuestas anteriores, ya que no hay día 31 de junio, el Calendario promueve al siguiente día válido porque Calendar.setLenient es cierto de forma predeterminada.