DateFormat.parse()
no es una consulta (algo que devuelve un valor y no cambia el estado del sistema). Es un comando que tiene el efecto secundario de actualizar un objeto interno Calendar
. Después de llamar al parse()
, debe acceder a la zona horaria accediendo a DateFormat
's Calendar
o llamando al DateFormat.getTimeZone()
. A menos que desee descartar la zona horaria original y usar la hora local, no use el valor devuelto Date
del parse()
. En su lugar, use el objeto de calendario después del análisis. Y lo mismo es cierto para el método de formato. Si va a formatear una fecha, pase el calendario con la información de la zona horaria al objeto DateFormat
antes de llamar al format()
. Así es como se puede convertir de un formato a otro formato de preservar la zona horaria original:
DateFormat originalDateFormat = new SimpleDateFormat("EEE MMM dd HH:mm:ss Z yyyy");
DateFormat targetDateFormat = new SimpleDateFormat("EEE., MMM. dd, yyyy");
originalDateFormat.parse(origDateString);
targetDateFormat.setCalendar(originalDateFormat.getCalendar());
return targetDateFormat.format(targetDateFormat.getCalendar().getTime());
Es complicado pero necesario ya parse()
no devuelve un valor que conserva zona horaria y format()
no acepta un valor que define una zona horaria (la clase Date
).
Correcto ... intente imprimir 'System.out.println (df.format (df.parse (df.format (cal.getTime())))); 'y funciona como se esperaba :-) –
Ok, ¿así que aparentemente el problema viene del toString()? Gracias por el consejo. –
@MaximeLaval: De 'Date.toString' en particular, sí, y debe tener en cuenta que una' Fecha' es solo un instante, no en un huso horario o calendario en particular. –