¿Por qué el patrón de zona horaria "OOOO" no muestra la completa GMT + 00: 00 Formato de desplazamiento?

anddero:

Es esto un error o de una pieza?

El DateTimeFormatterJavaDoc afirma explícitamente que cuando se utiliza el OOOOpatrón en mi formateador, la forma completa de la zona horaria localizada se debe utilizar (el énfasis es mío):

Cuatro letras salidas de la forma completa, que se localiza texto offset, tales como 'GMT, con hora 2 dígitos y el campo de minutos , segundos campo opcional si no es cero, y el colon, por ejemplo 'GMT + 08: 00'.

Pero en caso de que el tiempo está en GMT + 0:

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("EEE yyyy.MM.dd HH:mm:ss.SSS OOOO");

String timestamp = OffsetDateTime.ofInstant(Instant.now(), ZoneOffset.UTC).format(formatter);
System.out.println(timestamp);

Esta es la salida:

Mon 2019.02.25 22:30:00.586 GMT

Esperado:

Mon 2019.02.25 22:30:00.586 GMT+00:00
VV Ole:

¿Un insecto? Parece que estamos de acuerdo en que el comportamiento observado no está de acuerdo con la documentación (o al menos se tendrá que hacer una lectura muy creativa de la documentación para que coincida).

¿Una característica? Por lo que yo puedo decir el comportamiento observado es una decisión consciente en algún momento. El código fuente de la clase interna privada LocalizedOffsetIdPrinterParseren el interior DateTimeFormatterBuildercontiene if (totalSecs != 0) {antes de imprimir horas, minutos y segundos. No se ve como un error de copiar y pegar desde la misma línea de código exacto es en ningún otro lugar en el archivo (desplazamiento 0 es tratado especialmente en una serie de lugares, pero no estoy al tanto de ninguna otra parte se deja por completo).

En Java 8 patrón de formato OOOOni análisis sintácticos GMTsolos ni GMT+00:00, que debe ser un error. Se fija en Java 11. En Java 11 OOOOanálisis sintácticos GMTsolos muy bien, así que deben haber considerado esta aceptable (que analiza GMT+00:00y GMT-00:00también, aunque).

Es posible considerar la presentación de un error con Oracle y / o OpenJDK (estoy seguro sobre el lugar correcto en estos días). Si van a rechazarlo, fijar la documentación o corregir el código - No me atrevo a tratar de adivinar.

Solución: 'GMT'xxx

De todos modos, quiero que mi 00: 00 alguna manera.

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("EEE yyyy.MM.dd HH:mm:ss.SSS 'GMT'xxx");

Mie 02/27/2019 08: 46: 43.226 GMT + 00: 00

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=181006&siteId=1
Recomendado
Clasificación