¿Que tenemos que hacer?
- Validar que la fecha sea la correcta
- Crear el método diaSiguiente
- Crear el método diaAnterior
- El formato de entrada de la fecha sera "dd/mm/yyyy"
- Solo se permiten fechas entre 1900 y 2100 ¿porque? porque no :)
- Si la fecha que se introduce es incorrecta o no se encuentra entre el rango establecido, devolvera "25/10/2010" el dia que nacio mi perro, coloco esta fecha porque el problema no indica que tratamiento darle a una fecha erronea.
import java.util.regex.Pattern; /** * @web http://jc-mouse.blogspot.com/ * @author Mouse */ public class jcFecha { private int dia=25; private int mes=10; private int anio=2005; //formato fecha dd/mm/yyyy public jcFecha(String f){ validarfecha(f); } //hace lo que su nombre dice que hace :? private void validarfecha(String f){ boolean ok=false; //valida formato if(Pattern.matches("\\d{1,2}/\\d{1,2}/\\d{1,4}", f)){ //divide la fecha en dia, mes,año String[] ff = f.split("/"); //valida año -> solo años entre 1900 y 2100 anio = Integer.parseInt(ff[2]); if(anio>=1900 && anio<=2100){ //valida mes -> 1 a 12 mes = Integer.parseInt(ff[1]); if(mes>=1 && mes<=12){ //valida dia entre 1 y la cantidad de dias que tenga ese mes (incluido año bisiesto ) dia = Integer.parseInt(ff[0]); if(dia>=1 && dia<=cantidad_dias(mes,anio)){ ok=true; } } } } //si fecha no es valida o no cumple con las reglas anteriores //la fecha devolvera 25/10/2005 EL CUMPLE DE MI PERRO :) if(!ok){ dia=25; mes=10; anio=2005; } } public int getDia(){ return this.dia; } public int getMes(){ return this.mes; } public int getAnio(){ return this.anio; } public String getFecha(){ return dia + "/" + mes + "/" + anio; } //metodo publico que devuelve la fecha + un dia public String diaSiguiente(){ //si dias se encuentra entre el rango (1 - dia - (ultimo_dia-1)) se añade un dia //mes y anio se dejan como esta if(dia < cantidad_dias(mes,anio)){ dia++; }else{//sino se debe añadir +1 al mes //si no es diciembre se añade +1 al mes, anio se deja como esta if(mes < 12){ mes++; dia=1; }else{//si es diciembre, se pasa al año siguiente anio++; mes=1; dia=1; } } return dia + "/" + mes + "/" + anio; } /* devuelve la cantidad de dias de un mes dado mes y año */ private int cantidad_dias(int m, int y){ int d =0; switch(m) { case 1: case 3: case 5: case 7: case 10: case 12: case 8: d=31; break; case 2: if ((y % 4 == 0) && ((y % 100 != 0) || (y % 400 == 0))) d=29; else d=28; break; case 4: case 6: case 9: case 11: d=30; break; } return d; } }
Y ahora debemos probar nuestra clase jcFecha:
public class Main { public static void main(String[] args) { //se crea el objeto jcFecha jcFecha jc = new jcFecha("12/12/2001"); System.out.println("Fecha: " + jc.getFecha()); System.out.println("next day: " + jc.diaSiguiente()); System.out.println(); //fecha correcta jc = new jcFecha("30/11/2011"); System.out.println("Fecha: " + jc.getFecha()); System.out.println("next day: " + jc.diaSiguiente()); System.out.println(); //Fecha correcta -> año bisiesto jc = new jcFecha("28/2/2000"); System.out.println("Fecha: " + jc.getFecha()); System.out.println("next day: " + jc.diaSiguiente()); System.out.println(); //Fecha correcta -> Año no bisiesto jc = new jcFecha("28/2/2002"); System.out.println("Fecha: " + jc.getFecha()); System.out.println("next day: " + jc.diaSiguiente()); System.out.println(); //fecha incorrecta jc = new jcFecha("01/aa/2011"); System.out.println("Fecha: " + jc.getFecha()); System.out.println("next day: " + jc.diaSiguiente()); System.out.println(); //fecha incorrecta jc = new jcFecha("01/10/11"); System.out.println("Fecha: " + jc.getFecha()); System.out.println("next day: " + jc.diaSiguiente()); System.out.println(); //Fecha correcta -> fecha fuera de rango jc = new jcFecha("10/5/1789"); System.out.println("Fecha: " + jc.getFecha()); System.out.println("next day: " + jc.diaSiguiente()); } }
1 comentarios:
Hola excelente clase; pero tengo otro proble con la fecha y es el siguiente:
Quiero utilizar la lebreria DateChooser pero deseo que el formato de la fecha sea año-mes-dia para guardarla en una base de datos de mysql no se como hacerlo puesto que este componente tiene el fromato de fecha dia/mes/año y solo asi d/m/aa.
Sera posible que meayuden
Publicar un comentario