Foros del Web » Programación para mayores de 30 ;) » Java »

Diferencia entre dos fechas

Estas en el tema de Diferencia entre dos fechas en el foro de Java en Foros del Web. Hola, me estoy volviendo loco para conseguir lo que aparentemente es una tonería. Dado dos fechas, me gustaría mostrar lo siguiente: QUEDAN 167 Días, 22, ...
  #1 (permalink)  
Antiguo 27/03/2012, 04:42
 
Fecha de Ingreso: agosto-2009
Mensajes: 134
Antigüedad: 14 años, 8 meses
Puntos: 3
Diferencia entre dos fechas

Hola, me estoy volviendo loco para conseguir lo que aparentemente es una tonería.
Dado dos fechas, me gustaría mostrar lo siguiente:

QUEDAN 167 Días, 22, Horas, 35 Minutos , 9 Segundos

Estoy bloqueado y no logro encontrar el algoritmo. Consigo que muestre los días que quedan, por que antes he recogido los milisegundos totales y los he pasado a días.
Pero, ahora cómo hago la cuenta atrás de las horas, minutos y segundos? y que además, sean reales?
¿Alguien me echa un cable?


Código Javascript:
Ver original
  1. public class Fechas {
  2.  
  3.     //Lo he sacado de http://mundojava.blogspot.com/2007/04/fechas-en-java.html
  4.     public static void main(String[] args) {
  5.         long dias,minutos,segundos,horas;
  6.         GregorianCalendar gc = new GregorianCalendar(2012, 2, 1); // El segundo parámetro es un 0 por que el GregorianCalendar, empieza por Enero, es decir: Enero-->0 Febrero-->1 etc..
  7.         GregorianCalendar gc1 = new GregorianCalendar(2012, 2, 19);
  8.         //Obtengo los objetos Date para cada una de ellas
  9.         Date fec1 = gc.getTime();
  10.         Date fec2 = gc1.getTime();
  11.        
  12.        
  13.         //Realizo la operación
  14.        
  15.         long time = fec2.getTime() - fec1.getTime(); //Lo devuelve en milisegundos
  16.        
  17.         dias = time/(3600*24*1000); //Los milisegundos los paso a dias
  18.         System.out.println("Milisegundos:" + time + " Días: " + dias);
  19.     }
  20. }
  #2 (permalink)  
Antiguo 27/03/2012, 05:20
txemaarbulo
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Diferencia entre dos fechas

El cálculo lo has de realizar mediante el siguiente criterio

dy=Math.floor(dd/(60*60*1000*24)*1); // dias
hr=Math.floor((dd%(60*60*1000*24))/(60*60*1000)*1); // horas
mn=Math.floor(((dd%(60*60*1000*24))%(60*60*1000))/(60*1000)*1); // minutos
se=Math.floor((((dd%(60*60*1000*24))%(60*60*1000)) %(60*1000))/1000*1); // segundos

Algo más complejo ha de ser el restar el excedente de los días para mostrar las horas, el excedente de estar para mostrar los minutos y el excedente para los segundos.

Si quieres revisar el código completo, puedes verlo (con comentario previo incluido) en
http://www.digitaleando.com/digit2011/crono.html
(Ojo: los dígitos que se muestran son imágenes).

Txemaarbulo
  #3 (permalink)  
Antiguo 28/03/2012, 05:43
 
Fecha de Ingreso: agosto-2009
Mensajes: 134
Antigüedad: 14 años, 8 meses
Puntos: 3
Respuesta: Diferencia entre dos fechas

Voy a echar un vistazo! Gracias!!!!!
  #4 (permalink)  
Antiguo 28/03/2012, 08:42
txemaarbulo
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Diferencia entre dos fechas

Merece la pena indicarte la función (la tenía oxidada de hace +/- un año)

dd es la diferencia de fechas (en mi página es la fecha actual y la que indiques)

Math.floor te tira la cifra optenida (los milisegundos desde 1970) hacia abajo. Esto es, el resto de la división entera y el resto (aunque sea 0,999999) depreciadohacia abajo (no olvidado)

El % recoge el resto que te dará, primero horas, después minutos (% de horas), ...

Así que la ecuación está entera: en fechas que faltan y en fechas ya pasadas. Claro está, cuál restas a cual. (El mayor menos el menor: fechas futura menos fecha actual; fecha actual menos fecha pasada.)

Etiquetas: diferencia
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 13:28.