Ver la Versión Completa : [ CONSULTA ] Validar que la fecha sea valida
carrobe1390
16/02/13, 22:47:59
public boolean validarFecha(String fecha) throws java.text.ParseException {
if (fecha == null)
return false;
SimpleDateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy",Locale.getDefault());
if (fecha.trim().length() != dateFormat.toPattern().length())
return false;
txt2.requestFocus();
dateFormat.setLenient(false);
try {
dateFormat.parse(fecha.trim());
}
catch (ParseException pe) {
return false;
}
return true;
}
tengo el siguiente metodo que me valida el formato de la fecha.. mas no valida el año... ejemplo ingresa 12/12/2033 y pasa como podria corregir el error y que me valide que no pase del año en curso osea del 2013... gracias y espero me ayuden.. :D
Pues nunca he intentado hacer nada de esto pero si tienes la fecha en un String del tipo DD/MM/YYYY tienes 2 formas que se me ocurran ahora, una seria dividir entre 1000 creo que es y entonces cojerias los 4 ultimos digitos pero tendrias el problema de que si el usuario mete 13 como año entonces esto no serviria por lo cual tienes la otra posibilidad que seria hacer un substring del String desde la / + 1, porque si no le pones el +1 te cojeria la /.
Y cuando ya tienes ese numero en una variable, casi igual mejor que sea una variable numerica pues miras si es mayor al año actual y si lo es le asignas el año actual, asi cualquier año que quiera poner te dara igual porque estaras poniendo tu el año maximo.
Solo le veo un problema a esto y es que si le pones tu que sustituya la variable por 2013 deberias estar cambiando el programa cada año y si alguien no lo actualiza le dejaria de servir, osea lo mejor sera buscar un metodo que te permite recojer el año del sistema.
carrobe1390
16/02/13, 23:00:14
I por si acaso no tienes ese metodo?
kriogeN
16/02/13, 23:01:52
if (fecha.split("/")[2]==String.valueOf(Calendar.getInstance().get(Calend ar.YEAR))
//EL AÑO ES EL ACTUAL
carrobe1390
16/02/13, 23:23:55
if (fecha.split("/")[2]==String.valueOf(Calendar.getInstance().get(Calend ar.YEAR))
//EL AÑO ES EL ACTUAL
y en que parte del codigo iria?
carrobe1390
17/02/13, 00:13:02
relalize el sgte metodo
public boolean validarano(String fecha)
{
if (fecha.split("/")[0]==String.valueOf(Calendar.getInstance().get(Calend ar.DAY_OF_MONTH)))
{txt2.requestFocus();}
if (fecha.split("/")[1]==String.valueOf(Calendar.getInstance().get(Calend ar.MONTH)))
{txt2.requestFocus();}
if (fecha.split("/")[2]==String.valueOf(Calendar.getInstance().get(Calend ar.YEAR)))
{txt2.requestFocus();}
return true;
}
y en el boton de guardar puse la sgte validacion
if(validarano(texto2.getText().toString))
{
Toast toast2 = Toast.makeText(getApplicationContext(),"Ingrese el Año Correcto", Toast.LENGTH_LONG);
//toast1.setGravity(gravity, xOffset, yOffset)
toast2.setGravity(Gravity.CENTER | Gravity.BOTTOM ,0,0);
toast2.show();
txt2.requestFocus();
}
pero me sigue votando la fecha incorrecta aunque sea la del dia de hoy que estoy aciendo mal?
kriogeN
17/02/13, 01:45:33
Si siempre devuelves True obviamente siempre se va a ejecutar el contenido del if en guardar.
carrobe1390
17/02/13, 02:05:26
Si siempre devuelves True obviamente siempre se va a ejecutar el contenido del if en guardar.
cambie el valor de true por false i con la misma sentencia pero no me corrige el año...? en que estoi fallandO
Pero el problema es que si solo devuelves true siempre te entrara en el metodo y te saldra diciendo que es true, y lo mismo si cambias el valor por false, debes tener 2 caminos y 2 salidas, es decir por ejemplo tenerlo asi y el return false ponerlo dentro de los IF, y asi si entra en uno de los IF devuelve false y no hace los siguientes IF ni devuelve true.
Aunque fijandome en tu codigo tienes que poner el return True dentro de los IF, y un return false donde tienes ahora el return true, asi intentara entrar en los IF y si entra en alguno devolvera true y mostrara el mensaje de error, y si no llega a entrar en ningun IF entonces habra sido porque esta todo bien y llegara al return false; por lo que continuara la app y guardara, aun asi el Toast solo menciona el año, osea solo necesitarias devolver true en el caso de que el año este mal.
carrobe1390
17/02/13, 15:43:26
puedes ayudme con el codigo???
relalize el sgte metodo
public boolean validarano(String fecha)
{
if (fecha.split("/")[0]==String.valueOf(Calendar.getInstance().get(Calend ar.DAY_OF_MONTH)))
{txt2.requestFocus();}
if (fecha.split("/")[1]==String.valueOf(Calendar.getInstance().get(Calend ar.MONTH)))
{txt2.requestFocus();}
if (fecha.split("/")[2]==String.valueOf(Calendar.getInstance().get(Calend ar.YEAR)))
{txt2.requestFocus();}
return true;
}
y en el boton de guardar puse la sgte validacion
if(validarano(texto2.getText().toString))
{
Toast toast2 = Toast.makeText(getApplicationContext(),"Ingrese el Año Correcto", Toast.LENGTH_LONG);
//toast1.setGravity(gravity, xOffset, yOffset)
toast2.setGravity(Gravity.CENTER | Gravity.BOTTOM ,0,0);
toast2.show();
txt2.requestFocus();
}
pero me sigue votando la fecha incorrecta aunque sea la del dia de hoy que estoy aciendo mal?
un consejo, no compares Strings usando ==. Comparalos usando el fecha.split("/")[0].equals( String.valueOf(Calendar.getInstance().get(Calendar .DAY_OF_MONTH))).
Otra opción sería esta:
String [] splitFecha = fecha.split("/") ;
Integer.parseInt(splitFecha[0]) == Calendar.getInstance().get(Calendar.DAY_OF_MONTH);
Por cierto, si la fecha tiene formato dd/mm/yyyy, podrías crear un obheto del tipo date pasandole la fecha al constructor y luego se comparan con mayor facilidad
vBulletin® v3.8.1, Copyright ©2000-2025, Jelsoft Enterprises Ltd.