¿Por qué no obtengo el año correcto usando SimpleDateFormat en Java?
-
06-07-2019 - |
Pregunta
Intenté analizar datos en un formato MySql
, me encontré con SimpleDateFormat
. Puedo obtener el día y el mes adecuados, pero obtuve un resultado extraño para el año:
date = 2009-06-22;
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Date d = sdf.parse(date);
System.println(date);
System.println(d.getDate());
System.println(d.getMonth());
System.println(d.getYear());
Salidas:
2009-06-22
22 OK
5 Hum... Ok, months go from 0 to 11
109 o_O WTF ?
Intenté cambiar el formato a AAAA-MM-dd
(recibí un error) y aa-MM-dd
(no hizo nada). Estoy programando en Android, no sé si es importante.
Por ahora, evito eso usando una división, pero está sucio y me impide usar las funciones de i18n.
Solución
El año es relativo a 1900. Esa es una "característica". de la clase Date
. Intente utilizar el Calendario
.
Otros consejos
Gracias a Aaron, la versión correcta:
Calendar c = Calendar.getInstance();
c.setTime(sdf.parse(date));
System.println(c.get(Calendar.YEAR));
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow