Validação de Data

7 respostas
J

Ola galera gostaria sa saber se alguem tem um algoritimo que valida data: o meu algoritimo ja valida no seguite formato dd/mm/aaaa
o unico problema é que se eu colocar 40/90/5000 ele aceita ou seja soh valida o formato mesmo , algm tem um algoritimo que faça
a validação da data mesmo ?

obrigado!

7 Respostas

A

Como vc faz a validação hoje? A data vem em formato String?

Poste seu código, para facilitar a ajuda.

Att

J

Estou Fazendo Assim Amigão

if (!StringUtil.isEmpty(dadosTitulos.getTxVencimento().getText())) {

                if (dadosTitulos.getTxVencimento().getText().indexOf("/") != 2) {
                    dadosTitulos.getTxVencimento().setBorder(errorBorder);
                    MessageUtil.errorMessage("REQUIRED_FIELDS");
                    SwingUtilities.invokeLater(new Runnable() {

                        @Override
                        public void run() {
                            dadosTitulos.getTxVencimento().requestFocus();
                        }
                    });
                    return true;
                }
                if (dadosTitulos.getTxVencimento().getText().lastIndexOf("/") != 5) {
                    dadosTitulos.getTxVencimento().setBorder(errorBorder);
                    MessageUtil.errorMessage("REQUIRED_FIELDS");
                    SwingUtilities.invokeLater(new Runnable() {

                        @Override
                        public void run() {
                            dadosTitulos.getTxVencimento().requestFocus();
                        }
                    });
                    return true;
                }
                if (dadosTitulos.getTxVencimento().getText().length() != 10) {
                    dadosTitulos.getTxVencimento().setBorder(errorBorder);
                    MessageUtil.errorMessage("REQUIRED_FIELDS");
                    SwingUtilities.invokeLater(new Runnable() {

                        @Override
                        public void run() {
                            dadosTitulos.getTxVencimento().requestFocus();
                        }
                    });

                    return true;
                }

            } else {
                dadosTitulos.getTxVencimento().setBorder(errorBorder);
                MessageUtil.errorMessage("REQUIRED_FIELDS");
                SwingUtilities.invokeLater(new Runnable() {

                    @Override
                    public void run() {
                        dadosTitulos.getTxVencimento().requestFocus();
                    }
                });
                return true;
            }
           }
A

Julio,

Do jeito que você está fazendo, está comparando posições na String para definir se representa um formato de data, logo tem a regra de dia/mes valido.

Você tem duas opcoes, ou tratar isto (Péssima ideia).
Ou utilizar classes do java que ja fazem isto para você

No caso o campo getTxVencimento(), tem a representação de uma data, logo é so criar um metodo que pega o conteúdo deste campo e valide.
Segue abaixo um exemplo

public static boolean isDataValida(String date) { try { SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy"); sdf.setLenient(false); sdf.parse(date); } catch (ParseException e) { return false; } return true; }
Depois é so utilizar no seu código, onde você não vai ficar precisando validar mais a posição, pois o método acima valida se a data é valida, em sua formatação e nas regras de dias/meses.

Att

L

cara segue esse comando muito facil de usar só colca no seu codigo ja era

package util.Data;

import java.util.GregorianCalendar;



public class ValidaData {   

	public ValidaData() {   
	}   
	//public static void main(String[] s) {   
	// System.out.println(validaData("22/09/2010"));       
	// }   

	public static boolean validaData(String data) {  

		GregorianCalendar calendar =  new GregorianCalendar();     
		int dia = 0,mes = 0,ano = 0;   

		String diaStr = data.substring(0,2);   
		String mesStr = data.substring(3,5);   
		String anoStr = data.substring(6,10);   

		try {   
			dia = Integer.parseInt(diaStr);   
			mes = Integer.parseInt(mesStr);   
			ano = Integer.parseInt(anoStr);   
		} catch (Exception e) {   
			return false;   
		}   
		if (dia < 1 || mes < 1 || ano < 1)   
			return false;   
		else   
			if (mes == 1 || mes == 3 || mes == 5 || mes == 7 || mes == 8 || mes == 10 || mes == 12)   
				if (dia <= 31)   
					return true;   
				else   
					return false;   
			else   
				if (mes == 4 || mes == 6 || mes == 9 || mes == 11)   
					if (dia <= 30)   
						return true;   
					else   
						return false;   
				else   
					if (mes == 2)   
						if (calendar.isLeapYear(ano))   
							if (dia <= 29)   
								return true;   
							else   
								return false;   
						else   
							if (dia <= 28)   
								return true;   
							else   
								return false;   
					else   
						if (mes > 12)   
							return false;   
		return true;   
	}   

}

valeu!

A

lokit"s

Utilizar a API do java é melhor, pois o método já foi testado por muitas pessoas, sempre vai ter melhorias de performance, entre outras razões de se utilizar a API.

O código postado por você apesar de funcional, é necessário no minimo um case test para verificar se isto funciona da maneira correta. Isto atrasa o desenvolvimento, e pode trazer alguns bugs complicados de resolver na aplicação.

Então fica como dica, sempre prefira a API.

Att

J

Galera legal a dica estou usando a classe simple data format porem estou com uma duvida
como faço a seguinte comparação ?

a data que sera digitada no campo nao pode ser maior que 20/04/2020 e nao pode ser menor que 20/04/1991

if ((dadosTitulos.getTxDataLimiteDesc().getText())< (simpleDateFormat(20/04/1991))||dadosTitulos.getTxDataLimiteDesc().getText()>  (simpleDateFormat(20/04/2020)){
      MessageUtil.errorMessage("DATA_ INVALIDA");
}

galera esse é soh um exemplo que nao funciona mas gostaria que me mostrassem uma sintaxe que funcionasse, obrigado.

J
Segue um exemplo:
import java.text.SimpleDateFormat;
import java.util.Calendar;
public class CompareDate {

    public static void main(String args[]) {
        Calendar cal = Calendar.getInstance();
        Calendar currentcal = Calendar.getInstance();
        cal.set(1991, Calendar.APRIL, 20);
        currentcal.set(currentcal.get(Calendar.YEAR),currentcal.get(Calendar.MONTH), currentcal.get(Calendar.DAY_OF_MONTH));

        if (cal.before(currentcal)) {
            System.out.print("A data atual (" + new SimpleDateFormat("dd/MM/yyyy").format(currentcal.getTime()) + ") é maior que a data " + new SimpleDateFormat("dd/MM/yyyy").format(cal.getTime()));
        } else if (cal.after(currentcal)) {
            System.out.print("A data atual(" + new SimpleDateFormat("dd/MM/yyyy").format(currentcal.getTime()) + ") é menor que a data " + new SimpleDateFormat("dd/MM/yyyy").format(cal.getTime()));
        } else {
            System.out.print("As duas datas são iguais.");
        }
    }
}
Criado 22 de fevereiro de 2011
Ultima resposta 24 de fev. de 2011
Respostas 7
Participantes 4