La Web del Programador: Comunidad de Programadores
 
    Pregunta:  34300 - VALIDACIÓN DE FECHAS EN JAVA
Autor:  Pablo
Estoy intentando validar fechas en un servlet java, el problema es que todo el codigo que tengo usa la clase Date que esta "deprecada" ¿Como se puede saber que unos valores recibidos de pantalla corresponden a una fecha correcta?

  Respuesta:  Mauricio Damián Araoz
Hola amigo, la clase Date no esta en desuso, mas bien sus métodos están en desuso, pero sirve como puente para la clse Calendar, si tu código recibe un Date es fácil, creas un objeto Calendar del paquete java.util de la siguiente manera
// "date" será el objeto Date que recibes de tu clase
Calendar calendar=Calendar.getInstance()// El constructor es protegido y hay que construirlo de esta forma
calendar.setTime(date);

y posteriormente al objeto calendar le pides todos los datos que quieras
para hora ocupanos la constante HOUR_OF_DAY de la clase Calendar:

calendar.get(Calendar.HOUR_OF_DAY);// y el método get devuelve un entero dependiendo del campo que se le haya pedido

Si son las 20:14 hrs te devolvera 20 hay mas constantes como Calendar.MONTH, Calendar.DAY_OF_WEEK, Calendar.DAY_OF_YEAR,Calendar.MINUTE, Calendar.SECOND y así podrás ir pidiendo cada campo que necesites del Date que contiene la información.

Además si quieres no ir pidiendo cada uno de los campos existen otras clases que te pueden ser útiles dentro del paquete java.text llamada DateFormat que con sus metodos estáticos getDateInstance, getDateTimeInstance y getTimeInstance podrás manipular el formato con que se muestran las fechas, de igual manera se le pasa un objeto Date al DateFormat por lo que te recuerdo que Date no esta en desuso.

así mostrarías la fecha con formato
DateFormat dateFormat=DateFormat.getDateInstance(DateFormat.SHORT);
String fecha=dateFormat.format(date) //el objeto Date que tengas
System.out.println(fecha);

el ejemplo anterior imprimirá 14 / 8 / 2009
además hay más constantes como DateFormat.MEDIUM, LONG y FULL que son para fechas, pero también puedes mostrar horas formateadas pidiendo un DateFormat.getTimeInstance() al que también puedes o bien no pasarle ningún parámetro o ponerle DateFormat.MEDIUM, LONG o FULL, para más información checa la api de java disponible en www.sun.com

saludos

  Respuesta:  Willy´s Rguez B. Rguez B.
Hola, mira yo utilizo el siguiente codigo para validar fechas, pero valido en javascript, debido a que tengo tres combos para el dia, mes y año, si de algo te sirve , pues aqui lo tienes, bye, saludos....
function valida(){
var mes=document.forms[0].Mmes_Bitaco
var valormes=mes.options[mes.selectedIndex].text
var dia=document.forms[0].Mdia_Bitaco
var valordia=parseInt(dia.options[dia.selectedIndex].text)
var an=document.forms[0].Man_Bitaco
var valoran=parseInt(an.options[an.selectedIndex].text)
var mes2=document.forms[0].Mmes2_Bitaco
var valormes2=mes2.options[mes2.selectedIndex].text
var dia2=document.forms[0].Mdia2_Bitaco
var valordia2=parseInt(dia2.options[dia2.selectedIndex].text)
var an2=document.forms[0].Man2_Bitaco
var valoran2=parseInt(an2.options[an2.selectedIndex].text)
var valordiasis=7
var valormessis=8
var valoranosis=2002

// Asignacion de los meses a Numeros \\
if(valormes=="Enero"){
valormes=1;}
if(valormes=="Febrero"){
valormes=2;}
if(valormes=="Marzo"){
valormes=3;}
if(valormes=="Abril"){
valormes=4;}
if(valormes=="Mayo"){
valormes=5;}
if(valormes=="Junio"){
valormes=6;}
if(valormes=="Julio"){
valormes=7;}
if(valormes=="Agosto"){
valormes=8;}
if(valormes=="Septiembre"){
valormes=9;}
if(valormes=="Octubre"){
valormes=10;}
if(valormes=="Noviembre"){
valormes=11;}
if(valormes=="Diciembre"){
valormes=12;}

if(valormes2=="Enero"){
valormes2=1;}
if(valormes2=="Febrero"){
valormes2=2;}
if(valormes2=="Marzo"){
valormes2=3;}
if(valormes2=="Abril"){
valormes2=4;}
if(valormes2=="Mayo"){
valormes2=5;}
if(valormes2=="Junio"){
valormes2=6;}
if(valormes2=="Julio"){
valormes2=7;}
if(valormes2=="Agosto"){
valormes2=8;}
if(valormes2=="Septiembre"){
valormes2=9;}
if(valormes2=="Octubre"){
valormes2=10;}
if(valormes2=="Noviembre"){
valormes2=11;}
if(valormes2=="Diciembre"){
valormes2=12;}
//Fin de la Asignacion de los meses a Numeros\\

//Validacion de Fechas\\

if(valoran2 == valoranosis && valormes2 == valormessis && valordia2 > valordiasis){
alert ("La Fecha Final es Mayor a la Fecha del Sistema" );}
else
{
if(valoran2 == valoranosis && valormes2 > valormessis){
alert ("La Fecha Final es Mayor a la Fecha del Sistema" );}
else
{
if(valoran2 > valoranosis){
alert ("La Fecha Final es Mayor a la Fecha del Sistema" );}
else
{
if(valoran == valoran2 && valormes == valormes2 && valordia > valordia2){
alert ("La Fecha inicial es Mayor a la Final" );}
else
{
if(valoran == valoran2 && valormes > valormes2){
alert ("La Fecha inicial es Mayor a la Final");}
else
{
if(valoran > valoran2){
alert ("La Fecha inicial es Mayor a la Final");}
else
{
if(valormes==2&&valordia>28 || valormes==4&&valordia>30 || valormes==6&&valordia>30 || valormes==9&&valordia>30 || valormes==11&&valordia>30 ){
alert ("El Día de la fecha de Inicio No es Valido");
}
else
{
if(valormes2==2&&valordia2>28 || valormes2==4&&valordia2>30 || valormes2==6&&valordia2>30 || valormes2==9&&valordia2>30 || valormes2==11&&valordia2>30 ){
alert ("El Día de la fecha Final No es Valido");
}
else
{
document.forms[0].submit();
}
}
}
}
}
}
}
} //Fin de Validacion de Fechas\\
}