jueves, marzo 03, 2011

Java - Manejo de Fechas (java.util.Date)


"Si usa algún código del siguiente tutorial, den el icono de ME GUSTA del Facebook que se encuentra en su mano derecha, para que se vuelva Seguidor del Blog y también comentenos que tal les pareció el tutorial"


A continuación les voy a pasar un clase que yo uso para manejar las fechas. Tiene métodos importantes para el manejo de fechas como: Fecha actual, hora actual, sumar días a una Fecha, etc. Espero que les ayude mucho en la programación con el lenguaje de programación Java.
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
//@author  Henry Joe Wong Urquiza
public class ManejadorFechas {

    //Metodo usado para obtener la fecha actual
    //@return Retorna un <b>STRING</b> con la fecha actual formato "dd-MM-yyyy"
    public static String getFechaActual() {
        Date ahora = new Date();
        SimpleDateFormat formateador = new SimpleDateFormat("dd-MM-yyyy");
        return formateador.format(ahora);
    }

    //Metodo usado para obtener la hora actual del sistema
    //@return Retorna un <b>STRING</b> con la hora actual formato "hh:mm:ss"
    public static String getHoraActual() {
        Date ahora = new Date();
        SimpleDateFormat formateador = new SimpleDateFormat("hh:mm:ss");
        return formateador.format(ahora);
    }

    //Sumarle dias a una fecha determinada
    //@param fch La fecha para sumarle los dias
    //@param dias Numero de dias a agregar
    //@return La fecha agregando los dias
    public static java.sql.Date sumarFechasDias(java.sql.Date fch, int dias) {
        Calendar cal = new GregorianCalendar();
        cal.setTimeInMillis(fch.getTime());
        cal.add(Calendar.DATE, dias);
        return new java.sql.Date(cal.getTimeInMillis());
    }

    //Restarle dias a una fecha determinada
    //@param fch La fecha
    //@param dias Dias a restar
    //@return La fecha restando los dias
    public static synchronized java.sql.Date restarFechasDias(java.sql.Date fch, int dias) {
        Calendar cal = new GregorianCalendar();
        cal.setTimeInMillis(fch.getTime());
        cal.add(Calendar.DATE, -dias);
        return new java.sql.Date(cal.getTimeInMillis());
    }

    //Diferencias entre dos fechas
    //@param fechaInicial La fecha de inicio
    //@param fechaFinal  La fecha de fin
    //@return Retorna el numero de dias entre dos fechas
    public static synchronized int diferenciasDeFechas(Date fechaInicial, Date fechaFinal) {

        DateFormat df = DateFormat.getDateInstance(DateFormat.MEDIUM);
        String fechaInicioString = df.format(fechaInicial);
        try {
            fechaInicial = df.parse(fechaInicioString);
        } catch (ParseException ex) {
        }

        String fechaFinalString = df.format(fechaFinal);
        try {
            fechaFinal = df.parse(fechaFinalString);
        } catch (ParseException ex) {
        }

        long fechaInicialMs = fechaInicial.getTime();
        long fechaFinalMs = fechaFinal.getTime();
        long diferencia = fechaFinalMs - fechaInicialMs;
        double dias = Math.floor(diferencia / (1000 * 60 * 60 * 24));
        return ((int) dias);
    }

    //Devuele un java.util.Date desde un String en formato dd-MM-yyyy
    //@param La fecha a convertir a formato date
    //@return Retorna la fecha en formato Date
    public static synchronized java.util.Date deStringToDate(String fecha) {
        SimpleDateFormat formatoDelTexto = new SimpleDateFormat("dd-MM-yyyy");
        Date fechaEnviar = null;
        try {
            fechaEnviar = formatoDelTexto.parse(fecha);
            return fechaEnviar;
        } catch (ParseException ex) {
            ex.printStackTrace();
            return null;
        }
    }
}

25 comentarios:

Ola..

Excelente blog y excelentes post.. tengo una pequeña duda.. me sirvio bastante tu ejemplo de este post sobre manejar fechas. en particular estoy manejando horas. de tu codigo que pusiste para obtener la hora actual del sistema, quisiera saber si me puedes ayudar con lo siguiente.

Si tengo 2 horas (hora del sistema en formado hh:mm:ss) como obtener la diferencia o duracion o tiempo transcurrido entre ambas?? y obtener el resultado en el mismo formato hh:mm:ss..

me puedes ayudar???

Hola Nio ... Lo puedes hacer de la siguiente manera:

java.util.Date fechaMenor = new java.util.Date(2011, 03, 15, 8, 15, 23);
java.util.Date fechaMayor = new java.util.Date(2011, 03, 15, 11, 20, 40);
long diferenciaMils = fechaMayor.getTime() - fechaMenor.getTime();
long segundos = diferenciaMils / 1000;
long horas = segundos / 3600;
segundos -= horas * 3600;
long minutos = segundos / 60;
segundos -= minutos * 60;
System.out.println(horas+":"+minutos+":"+segundos);


Saludos

Ingeniero en el metodo sumar dias a una fecha me parece que se deberia de implementar con java.util.Date o es lo mismo hacerlo con java.sql.Date????

era justo lo que necesitaba.
Sabes por mi ignorancia antes no podia tener el formato yyyy-MM-dd, Y tenia que hacer maniobras dividiendo en pedacitos con for mi fecha actual y luego concatenandolos era un verdadero dolor de cabeza, se me era imposible usar un metodo para formatear en java, me daba error, pero fue una linda experiencia(me rompi la cabeza...)jaja.Gracias Master

Muy buen tuto me ayudo en muchoo gracias por haber personas con buenas intenciones de compartir y ayudar a otros q somos novatos

Gracias por tu aporte! De mucha utilidad tu clase!

muchas gracias, me fue muy útil, estaba batallando con eso de agregarle días a una fecha.

hooolaa. excelente blog, me sirvio para hacer un trabajo sobre fechas..graxx.

muchas gracias excelente blog, me sirvio de mucha utilidad

Gracias por los saludos y seguiremos apoyándolos =)

Gracias maestro!!! me salvaste. Excelente la información!!!

Guau, todo un ahorro de tiempo, Gracias Ing.

Gracias Master!! excelente código, bien explicado, k más podría decir! simplemente excelente!! ;-)

Bastante bueno, me salvaste de muchas gracias

gracias por el aporte! acabas de salvarme un proyecto de la universidad :D

gracias por el aporte! acabas de salvarme un proyecto de la universidad! :D

Excelente Clase muchas gracias !!!

Muchas gracias, me ha servido de mucho !!!

Gracias me ayudo!!

Gracias me has ayudado

Muy bueno y extremandamente util.

amigo gracias por el aporte nada mas una duda si quisiera compararlo horaactual con otra hora leída introducida por el usuario como se debe hacer

Excelente aporte. La verdad un código bastante sencillo, sin complicarse de concatenar luego la fecha sino ya definiendo un formato digitado. Muchas gracias, enserio que si.