Capturar webcam con VB.NET

¿Que haremos? Crearemos una aplicación en Visual Studio, la cual hará uso de una webcam para capturar el video en frames independientes y depositarlos en memoria para despues mostralos al usuario a través de un picturebox y un Timer para crear la ilusión de movimiento. ¿Porque lo haremos? Porque es justo y necesario ¿Que necesitamos? [...]

Envío de correo con JavaMail/Netbeans

JavaMail es una expansión de Java que facilita el envío y recepción de e-mail desde código java. JavaMail implementa el protocolo SMTP (Simple Mail Transfer Protocol) así como los distintos tipos de conexión con servidores de correo -TLS, SSL, autentificación con usuario y password, etc [Según SantaWikipedia] ¿Qué necesitamos? JavaMail 1.4.5 Java y Netbeans 6.9 [...]

Proyecto de base de datos Firebird VB

En este proyecto realizaremos una aplicación de base de datos Firebird con el lenguaje de programación de Visual Basic de Microsoft, este proyecto tendrá las funciones básicas de gestión INSERT, DELETE, UPDATE y una interfaz de usuario para utilizarlas. ¿Que necesitamos? Visual Studio 2008 o superior Firebird última versión Firebird ADO.NET Data Provider. Conocimientos básicos [...]

Imprimir imagen con Print

La siguiente clase hace uso de PRINT para imprimir una imagen que se encuentra en un variable de tipo FileInputStream, esta clase a su vez es implementada desde una interfaz que hace fácil su uso, la clase así como todo el proyecto esta comentado. import java.io.File; import javax.print.Doc; import java.io.IOException; import javax.print.DocFlavor; import javax.print.SimpleDoc; import java.io.FileInputStream; [...]

10/4/11

Ejercicio Resuelto: Clase Fecha

JAN29

El problema dice asi: 

"Crear la clase Fecha que tenga como atributos día, mes y año, en el constructor se debe validar que la fecha ingresada sea la correcta. Si la fecha ingresada es incorrecta colocar datos de tal manera que sea correcta. Además crear los métodos diaSiguiente, de tal manera que nos devuelva la fecha del día siguiente y diaAnterior que nos devuelva la fecha del día anterior."

¿Que tenemos que hacer?
  • Validar que la fecha sea la correcta
  • Crear el método diaSiguiente
  • Crear el método diaAnterior
Coloquemos algunas reglas:
  • 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.
La clase se llamara jcFecha


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());
    }
}


Resultado en consola
Y ahora se preguntaran y donde #@Mmrrr esta el metodo DiaAnterior?????, pues no voy a hacer toda su tarea :) , solo tienen que modificar un poco el metodo diaSiguiente y listo

1 comentarios:

jair dijo...

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

Post recomendado