Jump to content

Validar fechas orientado a objetos Java


Recommended Posts

Estimados, he tenido un problemón implementando un método para validar fechas con un compañero. Resulta que al ingresarla en un formulario hecho con Swing (bueno, en un JTextField rasquita xD), no me arroja error si coloco una fecha nada que ver, como por ejemplo 32/10/99999 y bueno, como mi compañero se encarga de hacer andar el JTextField de modo que funcione con el método, yo aún no aprendo a hacerlo aunque lo intente :pena:

 

Este es el método que quise implementar con mi compañero:

 

 

package valempresa2;
import javax.swing.*;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
/**
 *
 * @author Run.EXE
 */
//Validador fecha

public class fechaval extends ValEmpresa2{
     public void fecha(){
          try {
           //String dia = null;
           SimpleDateFormat dateFormat = new SimpleDateFormat("DD/MM/YYYY");
           dateFormat.setLenient(false); //Para que reclame cuándo una fecha está mala
                   String dia = null;
           Date fecha = dateFormat.parse(dia);
           JOptionPane.showMessageDialog(null,"Fecha válida: "+fecha.toString());
          } catch (ParseException e) {
           JOptionPane.showMessageDialog(null,"Fecha no válida");
          }
         }
    }
    
}

 

Y el código en donde debemos echar a andar este método (o sea, donde debemos poner todo el show del ingreso del dato en cuestión, cosa que quiero aprender:)

 

 

    private void fnTextActionPerformed(java.awt.event.ActionEvent evt) {                                       
          
    }                                      

 

Saludos, y gracias de antemano, si mi consulta es algo estúpida, perdónenme ;_;

Link to comment
Share on other sites

Hola amigo, trate usando expresiones regulares.

Saludos

+1,

Aqui hay un link que te puede ayudar:

http://sergiorazza.blogspot.com/2010/07/validacion-de-fechas-con-expresiones_11.html

 

Con esas expresiones solo tienes que aplicar un match (matches en java, creo?) con lo que ingreses en el input y la expresión en cuestión.

 

Saludos!

Link to comment
Share on other sites

import java.text.SimpleDateFormat;
import java.text.ParseException;

public class DateTest {

  public boolean isValidDate(String inDate) {

    if (inDate == null)
      return false;

    //set the format to use as a constructor argument
    SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
    
    if (inDate.trim().length() != dateFormat.toPattern().length())
      return false;

    dateFormat.setLenient(false);
    
    try {
      //parse the inDate parameter
      dateFormat.parse(inDate.trim());
    }
    catch (ParseException pe) {
      return false;
    }
    return true;
  }

  public static void main(String[] args) {

    DateTest test = new DateTest();

    System.out.println(test.isValidDate("2004-02-29"));
    System.out.println(test.isValidDate("2005-02-29"));
  }
}

 

Muy fácil de implementar...cuéntame en que parte estás topando ;)

 

 

Saludos :krider:

Link to comment
Share on other sites

Chicos, perdonen por la tardanza de la respuesta, pero ¿cómo las expresiones regulares en Java me podrían ayudar en esta validación? Siendo que deseo obviamente validar un string de fechas haha.

Y @AshWilliams, nosotros topábamos en que no podíamos echar a andar el código de la validación en nuestro JTextField para validar las fechas... Vamos a intentar con tu código y luego responderemos qué pasa ;)

 

Saludos y gracias ^^

Link to comment
Share on other sites

Chicos, perdonen por la tardanza de la respuesta, pero ¿cómo las expresiones regulares en Java me podrían ayudar en esta validación? Siendo que deseo obviamente validar un string de fechas haha.

Y @AshWilliams, nosotros topábamos en que no podíamos echar a andar el código de la validación en nuestro JTextField para validar las fechas... Vamos a intentar con tu código y luego responderemos qué pasa ;)

 

Saludos y gracias ^^

 

Las expresiones regulares son patrones, en este caso tu String debe ser DD/MM/YYYY y partir de eso, tu expresion debiese ser construida con ese patron, cosa que deba coincidir con tal, y luego aplicar el match para comparar el patron con tu string.

 

Te dejo un ejemplo:

 

 

import java.util.regex.Matcher;
import java.util.regex.Pattern;
 
   public static void main(String[] args) throws Exception {
System.out.print("Ingrese fecha => ");
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
//Obtengo la fecha ingresada.          
String fechaIngresada = br.readLine();
//Genero el patron/expresion regualr
Pattern expresionRegular = Pattern.compile("(0[1-9]|[12][0-9]|3[01])[- /.](0[1-9]|1[012])[- /.](19|20)\\d\\d");
//comparo la expresion con la fecha
Matcher m  = expresionRegular.matcher(fechaIngresada);
            
if ( m.find() ){ //si es true, pasó la validación.
System.out.println("Fecha correcta ;)");
}
else{
System.out.println("Fecha incorrecta :(");
 }      
       }

Suerte!

 

PS: Esa expresión no valida la cantidad de dias de cada mes ni años bisiestos, si necesitas tbn validar eso, revisa el link que postie antes y ahi hay una mas completa ;)

 

 

 

Link to comment
Share on other sites

  • 2 months later...
Guest
This topic is now closed to further replies.
×
×
  • Create New...