Problemas de cambios horarios con fechas en Java

Publicado por · 1 Comentario 

Estos días he tenido problemillas con el formato de fechas en Java. Resulta que si se le proporciona una fecha que coincida con un cambio de adelanto de hora y que no exista (por ejemplo el 25 de Marzo de 2007 a las 2 de la madrugada) entonces hace la conversión y la transforma a la hora cambiada (es decir, resultaría en el 25 de Marzo de 2007 a las 3 de la madrugada).

Es decir:

SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss");
Date dt = sdf.parse("25/03/2007 02:00:00");
System.out.println(sdf.format(dt));
dt = sdf.parse("25/03/2007 03:00:00");
System.out.println(sdf.format(dt));

Resulta en:

25/03/2007 03:00:00
25/03/2007 03:00:00

Esto es muy molesto si se trabaja con un servidor que proporciona timestamps en UTC, que son independientes de los cambios horarios para el ahorro de energía. Para evitarlo es necesario indicar que se trabajará con fechas de la franja horaria GMT:

SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss");
SimpleTimeZone stf = new SimpleTimeZone(0, "GMT");
sdf.setTimeZone(stz);
Date dt = sdf.parse("25/03/2007 02:00:00");
System.out.println(sdf.format(dt));
dt = sdf.parse("25/03/2007 03:00:00");
System.out.println(sdf.format(dt));

Ahora sí:

25/03/2007 02:00:00
25/03/2007 03:00:00

Acerca de Pablo
Un matemático-informático con demasiadas inquietudes y poco tiempo.

Comentarios

Deja un comentario

Una respuesta para “Problemas de cambios horarios con fechas en Java”
  1. Irasema dice:

    Muchas gracias, justo lo que necesitaba