Tengo este código simple:
DateTimeFormatter FORMATTER = DateTimeFormatter.ofPattern("yyyyMMdd HH:mm:ss.SSSSSS Z");
LocalDateTime.now().format(FORMATTER)
Entonces obtendré la siguiente excepción:
java.time.temporal.UnsupportedTemporalTypeException: Unsupported field: OffsetSeconds
at java.time.LocalDate.get0(LocalDate.java:680)
at java.time.LocalDate.getLong(LocalDate.java:659)
at java.time.LocalDateTime.getLong(LocalDateTime.java:720)
at java.time.format.DateTimePrintContext.getValue(DateTimePrintContext.java:298)
at java.time.format.DateTimeFormatterBuilder$OffsetIdPrinterParser.format(DateTimeFormatterBuilder.java:3315)
at java.time.format.DateTimeFormatterBuilder$CompositePrinterParser.format(DateTimeFormatterBuilder.java:2182)
at java.time.format.DateTimeFormatter.formatTo(DateTimeFormatter.java:1745)
at java.time.format.DateTimeFormatter.format(DateTimeFormatter.java:1719)
at java.time.LocalDateTime.format(LocalDateTime.java:1746)
Cómo resolver este problema?

El prefijo "Local" en JSR-310 (también conocido como java.time-package en Java-8) no indica que haya información de zona horaria en el estado interno de esa clase (aquí:)
LocalDateTime. A pesar del nombre a menudo engañoso, clases comoLocalDateTimeoLocalTimeNO tienen información de zona horaria o compensación .Intentó formatear un tipo temporal de este tipo (que no contiene ningún desplazamiento) con información de desplazamiento (indicado por el símbolo de patrón Z). Entonces, el formateador intenta acceder a una información no disponible y debe lanzar la excepción que usted observó.
Solución:
Utilice un tipo que tenga dicha información de desplazamiento o zona horaria. En JSR-310, esto es
OffsetDateTime(que contiene un desplazamiento pero no una zona horaria, incluidas las reglas de DST) oZonedDateTime. Puede vigilar todos los campos admitidos de este tipo buscando en el método isSupported (TemporalField). . El campoOffsetSecondsse admite enOffsetDateTimeyZonedDateTime, pero no enLocalDateTime.fuente
PlainDateTimeetc. Probablemente mejor porque el prefijo "simple" indica que no hay nada más que solo fecha y hora. Si todavía estuviéramos antes de Java v1.0, ningún prefijo habría sido mejor, pero los nombres comoDateetc. ya están reservados por el antiguo JDK.LocalDateTime.now (). Format (DateTimeFormatter.ofPattern ("aaaaMMdd HH: mm: ss.SSSSSS Z"));
fuente