No puedo entender por qué BST (desplazamiento UTC: UTC +1) se desplazó +11 en el siguiente código. Esperaría +1.
final String lastUpdated = "Mon Sep 27 18:29:00 BST 2021"; final DateTimeFormatter LAST_UPDATED_FORMATTER = DateTimeFormatter.ofPattern("EEE MMM dd HH:mm:ss z y").withLocale(Locale.UK); ZonedDateTime zonedDateTime = ZonedDateTime.parse(lastUpdated, LAST_UPDATED_FORMATTER); LocalDateTime localDateTime = zonedDateTime.withZoneSameInstant(ZoneId.of("UTC")).toLocalDateTime(); System.out.println(zonedDateTime.getOffset()); // +11:00; expected +1 System.out.println(localDateTime.toString());Salida de la consola:
+11:00 2021-09-27T07:29Todo está claro una vez que es la fecha en UTC:
final String lastUpdated = "Mon Sep 27 18:29:00 BST 2021";Eso es lo que obtienes por usar abreviaturas ambiguas, me temo. BST puede significar cosas diferentes, como se muestra aquí .
Parece que en este caso se interpreta como la hora estándar de Bougainville, que de hecho es UTC+11.
(Incluso dentro del Reino Unido, BST no siempre ha significado el horario de verano británico. Entre 1968 y 1971, BST significaba "hora estándar británica", aunque todavía era GMT+1).
El uso de abreviaturas está "algo bien" para dar formato , pero debe evitarse para propósitos de análisis cuando sea posible. Si recibe datos que sabe que se utilizarán y sabe lo que debería significar, probablemente sea mejor que los reemplace en el texto antes de analizarlos.