[RESOLVIDO ] Validação de Data

8 respostas Resolvido
javamysqldata
R

Galera preciso muito de uma ajuda eu tenho uma Data em String como eu posso fazer uma validação dela desde já agradeço com urgência fazendo favor
Obrigado

8 Respostas

J

Boa tarde!

Qual o tipo de validação que você quer fazer com a data?
Descreva melhor qual o problema que você está tendo pra galera poder entender e te ajudar da melhor maneira possível!

R

Desde já te agradeço jonathan

eu tenho no banco um string chamada data mais no netbeans desktop
eu preciso fazer uma validação de data de nascimento e uma validação de data para que não aceite datas futuras

S
Solucao aceita
public boolean data(String data) {
        try {
            //SimpleDateFormat é usada para trabalhar com formatação de datas
            //neste caso meu formatador irá trabalhar com o formato "dd/MM/yyyy"
            //dd = dia, MM = mes, yyyy = ano
            //o "M" dessa String é maiusculo porque "m" minusculo se n me engano é minutos
            SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
            //a mágica desse método acontece aqui, pois o setLenient() é usado para setar
            //sua escolha sobre datas estranhas, quando eu seto para "false" estou dizendo
            //que não aceito datas falsas como 31/02/2016
            sdf.setLenient(false);
            //aqui eu tento converter a String em um objeto do tipo date, se funcionar
            //sua data é valida
            sdf.parse(data);
            //se nada deu errado retorna true (verdadeiro)
            return true;
        } catch (ParseException ex) {
            //se algum passo dentro do "try" der errado quer dizer que sua data é falsa, então,
            //retorna falso
            return false;
        }
    }

O código acima valida se a data em String é válida, para testar se uma data não é maior que a data de hoje, faça assim (Java 8)

public boolean dataMenorQueHoje(String data) {
        //DateTimeFormatter tem uma função identica ao SimpleDateFormatter, mas escolhi usar ele
        //pois ele trabalha junto com o LocalDate que facilita muito trabalhar com datas
        DateTimeFormatter dtf = DateTimeFormatter.ofPattern("dd/MM/yyyy");
        //Aqui eu converto uma data em LocalDate e digo que quero no formato do DateTimeFormatter
        //que criei acima
        LocalDate dataVerificada = LocalDate.parse(data, dtf);
        //Esse comando pega a data de hoje
        LocalDate hoje = LocalDate.now();
        //Se dataVerificada comparada com hoje é menor ou igual a zero então retorna verdadeiro,
        //senão, retorna falso
       // com LocalDate não tem como comparar assim: data1 < data2
       //Tem que ser assim: data1.compareTo(data2)
       //quando a data1 é menor isso retorna -1, quando é maior retorna 1, e quando é igual retorna 0
       //por isso eu comparei com <=0 abaixo
        return dataVerificada.compareTo(hoje) <= 0;
    }
R

Desculpe mais teria como me explicar o que faz cada linha
Desde já agradeço muito
Obrigado

S

Editei minha resposta lá em cima, dá uma olhada, acho que ficou um pouco melhor de entender.

R

Muito Obrigado Ajudou muito

J
import java.util.Scanner;

public class Main{

public static void main(String args[]){

Scanner leia = new Scanner(<a href="http://System.in">System.in</a>);
//DECLARAÇÃO DE VARIÁVEIS
    byte dia;
    byte mes;
    int ano;
    String data;
    
    //ENTRADA DE DADOS
    System.out.print("Digite o dia: ");
    dia = leia.nextByte();
    System.out.print("Digite o mês: ");
    mes = leia.nextByte();
    System.out.print("Digite o ano: ");
    ano = leia.nextInt();
    
    //PROCESSAMENTO
    if(dia>0 && dia<32 && mes>0 && mes<13 && ano>0 && ((mes==1 || mes==3 || mes==5 || mes==7 || mes==8 || mes==10 || mes==12) || ((mes==4 || mes==6 || mes==9 || mes==11) && dia<=30) || (mes==2 &&(dia<=29 && ano%4==0 && (ano%100!=0 || ano%400==0))|| dia<=28))){
        data="DATA VÁLIDA";
    }else{
        data="DATA INVÁLIDA";
    }
    
    //SAÍDA DE DADOS
    System.out.println(+dia+"/"+mes+"/"+ano+" "+data);
}

}

J
public class Data {

private byte dia;

private byte mes;

private int ano;
public byte getDia() {
    return dia;
}

public void setDia(byte dia) {
    this.dia = dia;
}

public byte getMes() {
    return mes;
}

public void setMes(byte mes) {
    this.mes = mes;
}

public int getAno() {
    return ano;
}

public void setAno(int ano) {
    this.ano = ano;
}

public boolean validarData() {
    return this.dia > 0 && this.dia < 32 && this.mes > 0 && this.mes < 13 && this.ano > 0 && ((this.mes == 1 || this.mes == 3 || this.mes == 5 || this.mes == 7 || this.mes == 8 || this.mes == 10 || this.mes == 12) || ((this.mes == 4 || this.mes == 6 || this.mes == 9 || this.mes == 11) && this.dia <= 30) || (this.mes == 2 && (this.dia <= 29 && this.ano % 4 == 0 && (this.ano % 100 != 0 || this.ano % 400 == 0)) || this.dia <= 28));
}

@Override
public String toString() {
    return dia + "/" + mes + "/" + ano;
}

}

Criado 2 de dezembro de 2016
Ultima resposta 10 de nov. de 2017
Respostas 8
Participantes 4