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).
importjava.time.LocalDate;importjava.time.format.DateTimeFormatter;importjava.time.format.DateTimeParseException;importjava.util.Scanner;classMain{publicstaticvoidmain(String[]args){Stringpadrao="dd/MM/yyyy";DateTimeFormatterformatter=DateTimeFormatter.ofPattern(padrao);Scannerstdin=newScanner(System.in);while(true){System.out.print("Informe a data ("+padrao+"): ");StringdataUsuarioRaw=stdin.next();try{LocalDatedata=LocalDate.parse(dataUsuarioRaw.trim(),formatter);System.out.println("Data informada: "+data);}catch(DateTimeParseExceptionex){System.out.println("Data não obedece ao padrão "+padrao+".");}}}}
D
drsmachado1 like
@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.