Comprobación de fechas

Comprobación de fechas
Hola buenas.
Siguiendo con el tema de los filtros, en mi aplicación los usuarios introducen una fecha en un jtext, luego he de comprobar si está es una fecha válida, y he de aquí mi pregunta,
¿No hay ninguna clase que te convierta un String a una fecha válida, y si no puede que te devuelva algún código de error? Solo hace falta que me indiques si dicha clase existe, sino la implementaré. He estado ojeando las clases Calendar y GregorianCalendar, y ninguna de las dos implementa nada parecido. Si no existe dicha clase, lo que haré será crear una nueva clase descendiente de calendar, y que al constructor se le pase un string, extraer de el tres enteros, y utilizar el método heredado set(int year, int mounth, in date), para comprobarlos. ¿Te parece que esta forma de trabajo es la más adecuada?

1 respuesta

Respuesta
1
Inicialmente la clase que pides no esta. Java tiene una biblioteca de clases muy completa... pero no a medida.
Para comprobar que el formato introducido es correcto tendrás que hacer lo mismo que con los números. A partir de esta cadena tienes que sacar los distintos valores que componen la fechar: día, mes, año y pasárselo a GregorianCalendar para crear el objeto. Como no te quiero hacer currar mucho hay te mando la clase que comprueba las fechas. Al fin y al cabo lo que hace es sacar elementos de una cadena, fácil pero muy engorroso.
Espero que te sea útil
import java.lang.Exception;
import javax.swing.InputVerifier;
import javax.swing.JComponent;
import javax.swing.JTextField;
import javax.swing.JOptionPane;
/**
* Title: Gestor de tests para Siette
* Description:
* Copyright: Copyright (c) 2001
* Company:
* @author
* @version 1.0
*/
/**
* Clase que verifica que las fechas han sido introducidas corretamente en
* un campo de texto
*/
public class DateVerifier extends InputVerifier
{
/**
* Comprueba que el componente comp cumple las reglas de verificacion
* @param comp Objeto a verificar
* @return true si la entrada en correcta
*/
public boolean verify(JComponent comp)
{
String txt,sub;
int lugar,siguiente,valor;
txt=(((JTextField)comp).getText());
lugar=txt.indexOf("-");
if(lugar!=-1)
{
//dia
sub=txt.substring(0,lugar);
//lugar=siguiente;
try
{
valor=(Integer.decode(sub)).intValue();
}
catch(Exception e)
{
JOptionPane.showMessageDialog(null,"No se permiten caracteres Alfanuméricos","Formato Incorrecto",JOptionPane.ERROR_MESSAGE);
((JTextField)comp).selectAll();
return false;
}
if(!(valor<=31 && 0<valor))
{
JOptionPane.showMessageDialog(null,"Rango:1-31","Formato Incorrecto",JOptionPane.ERROR_MESSAGE);
((JTextField)comp).selectAll();
return false;
}
else
{
return compruebaMes(comp,txt,lugar);
}
}
else
{
JOptionPane.showMessageDialog(null,"Formato: DD-MM-AAAA","Formato Incorrecto",JOptionPane.ERROR_MESSAGE);
((JTextField)comp).selectAll();
return false;
}
}
/**
* Comprueba si el mes es correcto
*/
private boolean compruebaMes(JComponent comp,String txt,int lugar)
{
int siguiente;
String sub;
int valor;
siguiente=txt.indexOf("-",lugar+1);
if(siguiente!=-1)
{
sub=txt.substring(lugar+1,siguiente);
lugar=siguiente;
try
{
valor=(Integer.decode(sub)).intValue();
}
catch(Exception e)
{
JOptionPane.showMessageDialog(null,"No se permiten caracteres Alfanuméricos","Formato Incorrecto",JOptionPane.ERROR_MESSAGE);
((JTextField)comp).selectAll();
return false;
}
if(!(valor<=12 && 0<valor))
{
JOptionPane.showMessageDialog(null,"Rango:1-31","Formato Incorrecto",JOptionPane.ERROR_MESSAGE);
((JTextField)comp).selectAll();
return false;
}
else
{
return compruebaanno(comp,txt,lugar);
}
}
else
{
JOptionPane.showMessageDialog(null,"Formato: DD-MM-AAAA","Formato Incorrecto",JOptionPane.ERROR_MESSAGE);
((JTextField)comp).selectAll();
return false;
}
}
//}//fin comprueba mes
/**
*Compurueba si el año es correcto
*/
private boolean compruebaanno(JComponent comp,String txt,int lugar)
{
String sub;
int valor;
sub=txt.substring(lugar+1);
try
{
valor=(Integer.decode(sub)).intValue();
}
catch(Exception e)
{
JOptionPane.showMessageDialog(null,"No se permiten caracteres Alfanuméricos","Formato Incorrecto",JOptionPane.ERROR_MESSAGE);
((JTextField)comp).selectAll();
return false;
}
if(valor<2000)
{
JOptionPane.showMessageDialog(null,"Año Incorrecto","Formato Incorrecto",JOptionPane.ERROR_MESSAGE);
((JTextField)comp).selectAll();
return false;
}
else
return true;
}
}//fin clase

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas