Diferencia entre dos fechas. La forma correcta de hacerlo

por | abril 6, 2011
Muchas de las veces hemos necesitado obtener el numero de días entre una fecha inicial y una fecha final, y existe gran cantidad de información y variados métodos que indican como hacerlo, sin embargo ninguno de ellos me ha convencido del todo, no es mi intención desacreditar ninguna forma de programar, solo quiero dar mi aporte para la utilidad de todos.

El método es sencillo así que aquí va el código

.


Calendar c = Calendar.getInstance();

//fecha inicio

Calendar fechaInicio = new GregorianCalendar();

fechaInicio.set(2011, 03, 1);

//fecha fin

Calendar fechaFin = new GregorianCalendar();

fechaFin.set(2011, 03, 15);

//restamos las fechas como se puede ver son de tipo Calendar,

//debemos obtener el valor long con getTime.getTime.

c.setTimeInMillis(

       fechaFin.getTime().getTime() - fechaInicio.getTime().getTime());

//la resta provoca que guardamos este valor en c,

//los milisegundos corresponde al tiempo en dias

//asi sabemos cuantos dias

System.out.println("N. dias" + c.get(Calendar.DAY_OF_YEAR));

Espero les haya sido de utilidad.

Toda la documentación de la Clase Calendar:

2 pensamientos en “Diferencia entre dos fechas. La forma correcta de hacerlo

  1. Dr

    Muy util tu post, tengo una duda, ¿Por que envias dos veces el mensaje getTime() a las fechas?

    1. Alejandro Ayala Autor

      te refieres a la línea 19 a la 21?, en esa linea el método setTimeInMillis recibe un long, la documentación dice lo siguiente:

      setTimeInMillis(long millis)
      Sets this Calendar’s current time from the given long value.
      Parámetros:
      millis – the new time in UTC milliseconds from the epoch.

      y la fechaFin y la fechaInicio son parametros de tipo Calendar, entonces :

      fechaFin.getTime() -> hasta aqui retorna un valor tipo Date

      y

      fechaFin.getTime().getTime() -> retorna un valor tipo long

      entonces restamos el long de fechaFin y el long de fechaInicio y esto se setea en el método setTimeInMillis.

      Espero te aclare la duda.

Los comentarios están cerrados.