La subclase SimpleDateFormat añade 1900 al año

He creado un par de subclases de SimpleDateFormat para simplificar el trato con un feed de Azure al que estoy hablando en Android. Uno de ellos es el siguiente:

 public class ISO8601TLDateFormat extends SimpleDateFormat { private static String mISO8601T = "yyyy-MM-dd'T'HH:mm:ss.SSSZ"; public ISO8601TLDateFormat() { super(mISO8601T); } public ISO8601TLDateFormat(Locale inLocale) { super(mISO8601T, inLocale); } } 

Como se puede ver, la intención es producir o interpretar fechas que parezcan

2012-03-17T00: 00: 00.000 + 0100

Que es lo que el servicio Azure está esperando. Sin embargo, cuando alimento en objetos de Date construido de un DatePicker así:

 mDate = new Date(mDatePicker.getYear(), mDatePicker.getMonth(), mDatePicker.getDayOfMonth()); 

La salida de la ISO8601TLDateFormat es

3912-03-17T00: 00: 00.000 + 0100

Como puede ver, el año es 1900 más que yo, o cualquier otra persona que no sea del futuro , necesitaría. He examinado el objeto Date en su viaje entero al sistema de alimentación de Azure y informa que su fecha es 2012, que es lo que yo hubiera esperado. ¿Por qué se SimpleDateFormat el SimpleDateFormat ?

El problema es que los constructores de Date no reciben lo que esperan. Tomado de la documentación de java:

 public Date(int year, int month, int date) Deprecated. As of JDK version 1.1, replaced by Calendar.set(year + 1900, month, date) or GregorianCalendar(year + 1900, month, date). Allocates a Date object and initializes it so that it represents midnight, local time, at the beginning of the day specified by the year, month, and date arguments. Parameters: year - the year minus 1900. month - the month between 0-11. date - the day of the month between 1-31. 

Usted necesita tener presente que usted construye una fecha con 0, 0, 1 siendo el 1 de enero de 1900.

  • Ios como el selector de fecha / hora para la plataforma android
  • Cómo obtener la fecha del selector de fecha en android?
  • Android: ¿por qué Callback OnDateChange se llama dos veces?
  • Android DatePicker mostrar el nombre del mes
  • Cómo obtener el valor datepicker en formato de fecha?
  • Android datepicker set fecha máxima hace 14 años
  • Android: ¿Cómo cambiar el color de la fecha seleccionada en un elemento DatePicker?
  • Uso de DatePicker sin selector de día
  • SetMinDate () para DatePicker
  • JQuery Data Time selector que funciona bien en iOS / Android
  • Android: timepicker y datepicker en el mismo cuadro de diálogo
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.