Para manejar diferentes zonas horarias en Java se utiliza la clase TimeZone en combinación con la clase Calendar. La forma más habitual de obtener una instancia de TimeZone es:
Una vez obtenida una instancia de TimeZone, podemos modificar la zona horaria almacenada en un Calendar mediante el método setTimeZone():
Calendar gc = Calendar.getInstance(); System.out.println(gc.get(gc.HOUR_OF_DAY)); gc.setTimeZone(TimeZone.getTimeZone("GMT-8")); System.out.println(gc.get(gc.HOUR_OF_DAY));
Sin embargo, hay que tener cuidado de no pasar a Date en ningún momento ya que perderíamos la información almacenada en Calendar acerca de la zona horaria. Es muy fácil accidentalmente hacer:
SimpleDateFormat fmt = new SimpleDateFormat("HH:mm:ss z"); System.out.println(fmt.format(gc.getTime()));
pero con ello volverķamos a la zona horaria actual