DateTimeFormatterBuilder # appendText (TemporalField, mapa <largo, String>) lanza una excepción al analizar

votos
0

Estoy tratando de analizar el texto que representa un LocalDatevalor con el IsoField.QUARTER_OF_YEARuso de un DateTimeFormatterdevuelto por el DateTimeFormatterBuilder#buildFormatter()método.

El texto es problemático 20 Oct 2018 Q2. El valor de la cuarta parte ( Q2) es ciertamente incorrecto para un año calendario convencional, aquí 2018. Sin embargo, estoy trabajando con un año fiscal que termina el 30 de junio, por lo que la fecha 20 Oct 2018 sería en el segundo trimestre del año fiscal.

El formateador se construye con el siguiente código:

TemporalQuery<LocalDate> query = LocalDate::from;
String pattern = “d MMM uuuu qqq”;
Locale locale = Locale.forLanguageTag(en-US);
TemporalField tf = IsoFields.QUARTER_OF_YEAR;
Map<Long, String> m = new Hashtable<>();
m.put(4L, “Q2”);
DateTimeFormatter formatter = new DateTimeFormatterBuilder()                                                                                
                                       .parseCaseInsensitive()
                                       .appendPattern(pattern)
                                       .appendText(tf, m)
                                       .toFormatter(locale);
TemporalAccessor value = formatter.parse(text, query)

Los intentos de analizar generar una DateTimeParseExceptioncon el mensaje de error: “Texto '20 Oct 2018 Q2' no se pudo analizar en el índice 0”

He intentado cambiar el orden en que los parseCaseInsensitive()... appendText()son llamados métodos. La excepción todavía se lanza, aunque el índice especificado es 14 en una de las variaciones.

Posible razón para el problema: El método DateTimeFormatterBuilder # appendText (TemporalField, mapa) puede funcionar sólo en las operaciones de formato, y no para el análisis como en este caso.

Gracias de antemano por cualquier idea o ayudar!

Publicado el 20/10/2018 a las 10:23
fuente por usuario
En otros idiomas...                            


1 respuestas

votos
2

Intenta analizar la parte del año cuarto dos veces - una vez por instrucción patrón (usando letra q), y una vez al constructor de instrucciones (usando el método appendText). Solución: Retire la qqq partes en su patrón y usar "d MMM uuuu" .

Sin embargo algunas observaciones:

  • ejercicios fiscales no son compatibles en absoluto.
  • Utilizar mejor HashMaplugar de obsoleta Hashtable.
  • El código de ejemplo tiene marcas especiales de cotización en lugar de carbón estándar ( ").
  • El valor analizado es equivalente a LocalDate.of(2018, 10, 20)(y no tiene información acerca de sus cuartos especiales).
Respondida el 21/10/2018 a las 09:24
fuente por usuario

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more