Data

2 respostas
irlan

o problema é o seguinte eu tenho um formulario onde ha um campo para preencher uma data .eu queria saber se da para alguem me mostrar um código onde se possa verificar se a data digitada é valida ou não,antes de salvar no banco.valeu :slight_smile:

2 Respostas

V

[url]http://www.guj.com.br/posts/list/23550.java[/url]

[url]http://www.guj.com.br/posts/list/2143.java[/url]

ou

public boolean ValidaData(String data)
  {
      boolean retorno = true;
      int dia, mes, ano, dias_mes = 28;
      dia = mes = ano = 0;

      data = data.replace('-', ' ').replace('/', ' ').replace(':', ' ');
      data = data.replaceAll(" ", "");
      
      if ((data.length() != 8) && (data.length() != 21) && (data.length() != 22))
        retorno = false;     
      else
      {
        //Verifica Dia da Semana.
        if ((data.length() == 21) || (data.length() == 22))
        { 
          if((data.substring(0, 3).equals("Mon")) || (data.substring(0, 3).equals("Tue")) || (data.substring(0, 3).equals("Wed"))
          || (data.substring(0, 3).equals("Thu")) || (data.substring(0, 3).equals("Fri")) || (data.substring(0, 3).equals("Sat"))
          || (data.substring(0, 3).equals("Sun")))
          {}
          else
            retorno = false;
        
          //Verifica mes.
          if((data.substring(3, 6).equals("Jan")) || (data.substring(3, 6).equals("Feb")) || (data.substring(3, 6).equals("Mar"))
          || (data.substring(3, 6).equals("Apr")) || (data.substring(3, 6).equals("May")) || (data.substring(3, 6).equals("Jun"))
          || (data.substring(3, 6).equals("Jul")) || (data.substring(3, 6).equals("Aug")) || (data.substring(3, 6).equals("Sep"))
          || (data.substring(3, 6).equals("Oct")) || (data.substring(3, 6).equals("Nov")) || (data.substring(3, 6).equals("Dec")))
          {}
          else
            retorno = false;
            
          //Verifica Dias no Mes.
          if((data.substring(3, 6).equals("Jan")) || (data.substring(3, 6).equals("Mar")) || (data.substring(3, 6).equals("May"))
          || (data.substring(3, 6).equals("Jul")) || (data.substring(3, 6).equals("Aug")) || (data.substring(3, 6).equals("Oct"))
          || (data.substring(3, 6).equals("Dec")))
          {
            dias_mes = 31;
          }
          
          //Verifica Dias no Mes.
          if((data.substring(3, 6).equals("Apr")) || (data.substring(3, 6).equals("Jun")) || (data.substring(3, 6).equals("Set"))
          || (data.substring(3, 6).equals("Nov")))
          {
            dias_mes = 30;
          }
          
          //Verifica Dias no Mes.
          if((data.substring(3, 6).equals("Feb")) && (Integer.parseInt(data.substring(17, 21)) % 4 == 0))
          {
            dias_mes = 29;
          }
          
          //Verifica dia.
          if(ValidaNumero(data.substring(6, 8)) == true){
            dia = Integer.parseInt(data.substring(6, 8));
            if (dias_mes == 31)
              if ((dia > 31) || (dia < 1))
                retorno = false;
            if(dias_mes == 30)
              if ((dia > 30) || (dia < 1))
                retorno = false;
            if(dias_mes == 29)
              if ((dia > 29) || (dia < 1))
                retorno = false;
            if(dias_mes == 28)
              if ((dia > 28) || (dia < 1))
                retorno = false;
          }
          else
            retorno = false;
            
          //Verifica Hora
          if((Integer.parseInt(data.substring(8, 10)) < 0) || (Integer.parseInt(data.substring(8, 10)) > 24))        
            retorno = false;          
          
          //Verifica Minuto
          if((Integer.parseInt(data.substring(10, 12)) < 0) || (Integer.parseInt(data.substring(10, 12)) > 59))
            retorno = false;
            
          //Verifica Segundo
          if((Integer.parseInt(data.substring(12, 14)) < 0) || (Integer.parseInt(data.substring(12, 14)) > 59))
            retorno = false;
            
          //Verifica Ano
          if((Integer.parseInt(data.substring(data.length() - 4, data.length())) < 1970) || (Integer.parseInt(data.substring(data.length() - 4, data.length())) > 2099))
            retorno = false;            
        }
        else
        {        
          //Verifica ano.
          if(ValidaNumero(data.substring(4, 8)) == true){
            ano = Integer.parseInt(data.substring(4, 8));
            if ((ano > 2099) || (ano < 1900))
              retorno = false;
          }
          else
            retorno = false;
          
          //Verifica mes          
          if(ValidaNumero(data.substring(2, 4)) == true){
             mes = Integer.parseInt(data.substring(2, 4));
             if ((mes > 12) || (mes < 1))
               retorno = false;
               
              if ((mes == 1) || (mes == 3) || (mes == 5) || (mes == 7) || (mes == 8) || (mes == 10) || (mes == 12))
                dias_mes = 31;
            
              if ((mes == 4) || (mes == 6) || (mes == 9) || (mes == 11))
                dias_mes = 30;
            
              if ((mes == 2) && (ano % 4 == 0))
                dias_mes = 29;
          }
          else
            retorno = false;
            
          //Verifica dia.
          if(ValidaNumero(data.substring(0, 2)) == true){
            dia = Integer.parseInt(data.substring(0, 2));
            if (dias_mes == 31)            
              if ((dia > 31) || (dia < 1))
                retorno = false;
            if (dias_mes == 30)            
              if ((dia > 30) || (dia < 1))
                retorno = false;
            if (dias_mes == 29)            
              if ((dia > 29) || (dia < 1))
                retorno = false;
            if (dias_mes == 28)            
              if ((dia > 28) || (dia < 1))
                retorno = false;
          }
          else
            retorno = false;
        }
      }
      return retorno;
  }
HAHAHAHAHAHAHAH :evil: :twisted: :evil: :twisted:
ViniGodoy

Você pode usar a classe SimpleDateFormat para fazer isso com menos linhas de código e independente de idioma.

public boolean isValidDate(String date, String format) { SimpleDateFormat sdf = new SimpleDateFormat(format); try { sdf.parse(date); sdf.setLenient(false); //Impede que datas como 31/02/2007 virem 02/03/2007 return true; } catch (ParseException e) { return false; } }

Talvez seja necessário verificar caso você aceite datas vazias, como descrito, aqui.

Agora você pode fazer:

if (!isValidDate(txtData.getText(), "dd/mm/yyyy")) JOptionPane.showMessageDialog(this, "Data inválida!");

Outra opção é baixar e usar um componente que mostre um calendário, e que já valide a data sozinho, como o JCalendar.

Se for manipular datas, também não custa dar uma olhada na JODA.

Criado 3 de maio de 2007
Ultima resposta 4 de mai. de 2007
Respostas 2
Participantes 3