Saltar al contenido

¿Cuál es el formato equivalente? string de DateTimeFormatter.ISO_OFFSET_DATE_TIME?

Ten en cuenta que en las ciencias informáticas un problema casi siempere suele tener diversas resoluciones, así que nosotros enseñamos lo más óptimo y eficiente.

Solución:

Esto funcionó para mí:

    ZonedDateTime dateTime = ZonedDateTime.now();
    System.out.println(dateTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSSXXX")));
    System.out.println(dateTime.format(DateTimeFormatter.ISO_OFFSET_DATE_TIME));

2018-10-03T07:24:14.772+03:00 
2018-10-03T07:24:14.772+03:00

Aunque no siempre producirá el mismo resultado porque ISO_OFFSET_DATE_TIME imprime una fracción de segundo con una longitud diferente según el valor de los nanos, mientras que .SSS tiene una longitud fija = 3

     ZonedDateTime dateTime = ZonedDateTime.of(2001, 1, 1, 0, 0, 0, 1, ZoneId.systemDefault());
     System.out.println(dateTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSSXXX")));
     System.out.println(dateTime.format(DateTimeFormatter.ISO_OFFSET_DATE_TIME));   

     2001-01-01T00:00:00.000+02:00
     2001-01-01T00:00:00.000000001+02:00

No, esto no es posible.

Bajo pedido: Sí, sabemos que no existe un patrón de formato equivalente string de DateTimeFormatter.ISO_OFFSET_DATE_TIME.

DateTimeFormatter.ISO_OFFSET_DATE_TIME omite los segundos y/o nano de segundo si son cero. Si los nanos son distintos de cero, “se generarán tantos dígitos como sea necesario”. No hay una letra de patrón o una combinación de letras de patrón que le proporcione el mismo comportamiento.

En lo más profundo DateTimeFormatter, ISO_OFFSET_DATE_TIME usa un ISO_LOCAL_TIMEque a su vez se define de esta manera:

    ISO_LOCAL_TIME = new DateTimeFormatterBuilder()
            .appendValue(HOUR_OF_DAY, 2)
            .appendLiteral(':')
            .appendValue(MINUTE_OF_HOUR, 2)
            .optionalStart()
            .appendLiteral(':')
            .appendValue(SECOND_OF_MINUTE, 2)
            .optionalStart()
            .appendFraction(NANO_OF_SECOND, 0, 9, true)
            .toFormatter(ResolverStyle.STRICT, null);

Cuál es la forma de obtener el comportamiento dinámico: usando un DateTimeFormatterBuilder y es optionalStart y appendFraction métodos.

Aparte, no desea copiar el comportamiento de ISO_OFFSET_DATE_TIME exactamente. Deberá utilizar el formateador incorporado.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *