Manipulação de Datas

Olá
Estou com problema na verificação de data, tenho um método que vai receber uma data em string (dd/mm/yyyy) tenho que verificar se a data é valida. Tentei fazer aqui mas datas do tipo dd/mm/yy e dd/mm/yyy estão sendo aceitas. Essas datas serão salvas em um Set.
Existe outro método do qual irá pegar as datas desse Set e irá retornar em forma de string (no set são salvos em tipo Date).

São muito métodos, estou confuso.

Procure por expressões regulares, elas podem até validar para que não existam datas inválidas do tipo 99/99/yyyy. Nesse link tem algumas ideias:

http://pt.stackoverflow.com/questions/54657/express%C3%A3o-regular-para-datas-sem-separador

1 curtida
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.time.format.DateTimeParseException;
import java.util.Scanner;

class Main {
    public static void main(String[] args) {
        String padrao = "dd/MM/yyyy";
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern(padrao);
        Scanner stdin = new Scanner(System.in);
        while (true) {
            System.out.print("Informe a data (" + padrao + "): ");
            String dataUsuarioRaw = stdin.next();
            try {
                LocalDate data = LocalDate.parse(dataUsuarioRaw.trim(), formatter);
                System.out.println("Data informada: " + data);
            } catch (DateTimeParseException ex) {
                System.out.println("Data não obedece ao padrão " + padrao + ".");
            }
            
        }
    }
}
1 curtida

@ThiagoCavalcanti, primeiramente, você precisa entender que, quando um usuário insere uma String representando uma data, o frontend (view) deve dar o primeiro tratamento.
Se o sistema é web, isso é responsabilidade do javascript e, para isso, existem componentes prontos, os famosos datepicker. Se está usando um framework como jsf, qualquer implementação que não seja a padrão (mojarra) possui componentes e validadores específicos.
Quando o sistema é desktop, aí a coisa é mais complicada. Porém, existe um componente que também pode ajudar, o JDateChooser. Se este é o caso, vale a pena dar uma conferida.
Se é um sistema batch ou para estudos, daqueles que rodam no terminal ou abrem popups para receber os valores, a coisa fica mais complicada, mas, não é um bicho de sete cabeças.
Se não quiser partir para as regex, nem seguir o que o @lvbarbosa sugeriu, pode fazer com try/catch. Mas, aí terá que validar várias vezes (uma para cada possibilidade) a String inserida.

1 curtida