Manipulação de Datas

3 respostas
javadataformat
T

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.

3 Respostas

B

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

L
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 + ".");
            }
            
        }
    }
}
D

@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.

Criado 11 de março de 2017
Ultima resposta 13 de mar. de 2017
Respostas 3
Participantes 4