LocalDate está en silencio corrigiendo malas fechas?

usuario final :

Me esperaba una excepción de:

LocalDate.parse("9/31/2018",DateTimeFormatter.ofPattern("M/d/yyyy"));

pero en lugar de eso Tienes 30 Sep, 2018 !? No me malinterpreten, es bueno que es ser inteligente, pero que han llegado a esperar un mayor nivel de precisión de las clases Fecha de Java ...

¿Alguien puede arrojar algo de luz sobre cómo / por qué? Esto va a meterse con mis pruebas.

Jon Skeet:

Esto se debe a la ResolverStyleutilizada por el formateador para analizar el valor. Por defecto (al menos en mi máquina) que es "inteligente":

Por ejemplo, la resolución de año-mes y el día de mes en el sistema de calendario ISO usando el modo inteligente se asegurará de que el día de mes es de 1 a 31, la conversión de cualquier valor más allá del último día de mes-de-válidos para ser el último día de mes válida.

... pero se puede hacer más "estricta" en su lugar, en cuyo caso el análisis de falla. Ejemplo completo (usando uen lugar de yevitar la ambigüedad de no especificar una era):

import java.time.*;
import java.time.format.*;

public class Test {

    public static void main (String[] args) {
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("M/d/uuuu");
        // With the "smart" resolver style, it parses
        System.out.println(formatter.getResolverStyle());
        LocalDate date = LocalDate.parse("9/31/2018", formatter);
        System.out.println(date);

        // But with a strict style...
        formatter = formatter.withResolverStyle(ResolverStyle.STRICT);
        LocalDate.parse("9/31/2018", formatter);
    }
}

Supongo que te gusta

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