SimpleDateFormat ignorando el desplazamiento DST en Android

En Europa Central, la zona horaria actual (a partir del 3 de octubre) es:

CEST / UTC + 2

Pero cuando creo una instancia de SimpleDateFormaten Android ahora ...

dateTimeFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ");

... vuelve CET / UTC+1como la zona horaria. Por lo tanto, se ignora el desplazamiento DST que todavía debe estar allí en este momento. ¿Por qué es esto?

Además, cuando se utiliza el método getTimezoneOffset()de Dateinstancias (ahora en desuso) , devuelve resultados inconsistentes:

(new Date()).getTimezoneOffset()devuelve correctamente -120 (2 horas) mientras que dateTimeFormat.parse("2012-10-03T22:00:00.000+0000").getTimezoneOffset()devuelve -60 (1 hora).

¿Cómo puede pasar esto? ¿Estoy haciendo algo mal o es un error conocido?

Nota: He escuchado que hay bibliotecas que ofrecen mejores cálculos de tiempo (por ejemplo, Joda Time), y he escuchado eso con bastante frecuencia ahora;) Pero usando algunas soluciones alternativas, puede usar la biblioteca de tiempo Java incorporada con la misma facilidad. .

Y, por supuesto, la zona horaria está configurada correctamente en mi máquina.

Respuesta 1

No sé si he entendido correctamente su caso de uso, pero por lo que he entendido cuando pruebo este código.

public static void main(String[] args) {
        SimpleDateFormat dateTimeFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ");
        String date="2012-10-03T22:00:00.000+0000";
        try {
            System.out.println(dateTimeFormat.getTimeZone().getDisplayName());
            System.out.println("Today : "+new Date().toString()+ ", Timezone Offset :" +
                    +(new Date()).getTimezoneOffset());
            System.out.println("Parsed Date : "+
                    dateTimeFormat.parse(date).toString()
                    + ", Timezone Offset : "
                    +dateTimeFormat.parse(date).getTimezoneOffset());           
        } catch (ParseException e) {            
            e.printStackTrace();
        }
    }

Estoy obteniendo una salida consistente, es decir:

Central European Time
Today : Wed Oct 03 09:44:56 CEST 2012, Timezone Offset : -120
Parsed Date : Wed Oct 03 23:00:00 CEST 2012, Timezone Offset : -120
Respuesta: 2

Estoy tratando de conectarme a una base de datos mysql, pero sigo recibiendo el error: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: error en el enlace de comunicaciones. ..

Quiero extraer toda la anotación de mi objeto JSONArray y encontré esta publicación https://www.mkyong.com/java/json-simple-example-read-and-write-json/. El problema es que mi JSONArray es una especie de "...

Posible duplicado: ¿Cómo puedo interactuar con el diseño de la pantalla de bloqueo para mostrar texto en él, como esta aplicación: Quiero mostrar algo de texto en la pantalla de bloqueo de Android igual que la aplicación de Android 'Me gusta' ...

Soy nuevo en Scala y nuestro proyecto combina código Java y Scala (usando Play Framework). Estoy tratando de escribir un método Scala que pueda tomar un mapa Java anidado como: LinkedHashMap <String, ...