¿Hay una manera eficiente para comprobar si una cadena representa una fecha?

Kostas Thanasis:

Me dan un txt con algún formato específico. El formato se supone que a partir de dd / MM / uuuu . Sin embargo me gustaría comprobar si es de hecho este formato específico o de lo contrario mi código se romperá.

Ahora mis pensamientos eran para comprobar si los 10 primeros caracteres específicos (con los delimitadores) pueden definir un objeto LocalDate. Así que me encontré con esto:

public boolean isDate(String date) {

    DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd/MM/uuuu");
    LocalDate ld = null;
    try {
        ld = LocalDate.parse(date, formatter);
        System.out.println(ld);
    } catch (DateTimeParseException e) {
        System.out.println("Date " + date + " is not a date.");
        return false;

    }

    return true;
}

Sin embargo, esto es no la mejor práctica porque estoy controlando el flujo Programm con excepciones. Además, tengo para comprobar otros 8 campos de representar a tiempo, etc .. así que mi código estará lleno de capturas intento. ¿Hay una manera más eficiente para ir alrededor de esto?

la riqueza:

No hay nada malo con el código en cuestión. Es claro y legible, y no hay problemas de rendimiento obvias (Seguro de que pueden almacenar en caché el DateTimeFormattersi quieres, pero eso no va a hacer una diferencia). Las excepciones no causan una actuación significativa golpeado o bien, como yur mencionado .

Este no es un caso de flujo de control por excepciones. La única manera de saber si se trata de una fecha es mediante el análisis de la misma. El analizador será una excepción si no lo es. No existe LocalDate.tryParse(), pero si lo hubiera, se vería como el código en la pregunta.

Este es un caso de "oí / yo estaba bajo el supuesto", y aunque algunas cosas han sido un verdadero problema en el pasado (por ejemplo, la sincronización lenta ), por lo general están basados en versiones no actualizadas de Java hace a partir de más de 10 años o un problema se entiende en la manera incorrecta (por ejemplo, flujo de excepciones / control).

Supongo que te gusta

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