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

Diferencia entre fechas con excatitud de Mes,Dia,hora,minuto,segundo

Estas en el tema de Diferencia entre fechas con excatitud de Mes,Dia,hora,minuto,segundo en el foro de Java en Foros del Web. Hola a todos. Como digo en el titulo, necesito calcular la diferencia entre dos fechas con exacitud de meses, dias, horas, minutos, segundos. Ya estopy ...
  #1 (permalink)  
Antiguo 06/08/2009, 05:55
 
Fecha de Ingreso: abril-2009
Mensajes: 30
Antigüedad: 15 años
Puntos: 0
Diferencia entre fechas con excatitud de Mes,Dia,hora,minuto,segundo

Hola a todos.


Como digo en el titulo, necesito calcular la diferencia entre dos fechas con exacitud de meses, dias, horas, minutos, segundos.


Ya estopy usando el GregorianCalendar, pero la doferencia me la da en milisegundos, que dividiendo me da dias, pero me complico en la parte de los mese dado que no todos los meses son iguales, algunos tienen 28-29-30-31 dias, dependiendo de año, por logica podria validar todo eso, pero me preguntaba si java tendria alguna libreria para esto??????????


de ante manno GRACIAS.
  #2 (permalink)  
Antiguo 06/08/2009, 12:45
Avatar de DiabloGuardian  
Fecha de Ingreso: noviembre-2008
Ubicación: Hidalgo
Mensajes: 215
Antigüedad: 15 años, 5 meses
Puntos: 3
Respuesta: Diferencia entre fechas con excatitud de Mes,Dia,hora,minuto,segundo

hola RockXellos, lo puedes hacer usando el metodo getTime() de la clase Date mmmm este metodo te devuelve la fecha en milisegundos, entonces puedes obtener los milisegundo de las dos fechas, realizar la diferencia y despues el resultado lo conviertes a meses,dias,horas minutos y segundos.

aqui te pongo un link que de seguro te da una muy buena idea de como realizar tus conversiones restar fechas en java

ojala y te sirva, saludos
__________________
-=:[ Lo importante no es saber todo, sino saber buscar ]:=-
  #3 (permalink)  
Antiguo 06/08/2009, 15:50
 
Fecha de Ingreso: abril-2009
Mensajes: 30
Antigüedad: 15 años
Puntos: 0
Respuesta: Diferencia entre fechas con excatitud de Mes,Dia,hora,minuto,segundo

Gracias diablo, aqui pongo una version completa de la solucion a la que llegué

=============================================
S O L U C I O N C O M P L E T A
=============================================

Código SOLcOMPLETA:
Ver original
  1. //pruebas 31-12-2008 09:45 && 09-04-2009 12:27 //hay 3 meses 9 dias 2 horas 41 minutos
  2.         String fechaInicial = "31-12-2008 09:45:00";
  3.         String fechaFinal = "30-01-2009 12:27:00";
  4.         //System.out.println("año :"+fecha.substring(6,10));
  5.         //System.out.println("dia :"+fecha.substring(0,2));
  6.         //System.out.println("mes :"+fecha.substring(3,5));
  7.         //System.out.println("hora :"+fecha.substring(11,13));
  8.         //System.out.println("minuto :"+fecha.substring(14,16));
  9.         //System.out.println("seg :"+fecha.substring(17,19));
  10.    
  11.    
  12.        
  13.         java.util.GregorianCalendar jCal = new java.util.GregorianCalendar();
  14.         java.util.GregorianCalendar jCal2 = new java.util.GregorianCalendar();
  15.         //jCal.set(year, month, date, hourOfDay, minute)
  16.         jCal.set(Integer.parseInt(fechaInicial.substring(6,10)), Integer.parseInt(fechaInicial.substring(3,5))-1, Integer.parseInt(fechaInicial.substring(0,2)), Integer.parseInt(fechaInicial.substring(11,13)),Integer.parseInt(fechaInicial.substring(14,16)), Integer.parseInt(fechaInicial.substring(17,19)));
  17.         jCal2.set(Integer.parseInt(fechaFinal.substring(6,10)), Integer.parseInt(fechaFinal.substring(3,5))-1, Integer.parseInt(fechaFinal.substring(0,2)), Integer.parseInt(fechaFinal.substring(11,13)),Integer.parseInt(fechaFinal.substring(14,16)), Integer.parseInt(fechaFinal.substring(17,19)));
  18.        
  19.         //System.out.println("Date format " + dateformat.format(jCal.getTime()) + "\n");
  20.         //System.out.println("Date format " + dateformat.format(jCal2.getTime()) + "\n");
  21.  
  22.         long diferencia = jCal2.getTime().getTime()-jCal.getTime().getTime();
  23.         double minutos = diferencia / (1000 * 60);
  24.         long horas = (long) (minutos / 60);
  25.         long minuto = (long) (minutos%60);
  26.         long segundos = (long) diferencia % 1000;
  27.         long dias = horas/24;
  28.         //Calcular meses...
  29.         //Crear vector para almacenar los diferentes dias maximos segun correponda
  30.         String[] mesesAnio = new String[12];
  31.         mesesAnio[0] = "31";
  32.         //validacion de los años bisiestos
  33.         if (jCal.isLeapYear(jCal.YEAR)){mesesAnio[1] = "29";}else{mesesAnio[1] = "28";}
  34.         mesesAnio[2] = "31";
  35.         mesesAnio[3] = "30";
  36.         mesesAnio[4] = "31";
  37.         mesesAnio[5] = "30";
  38.         mesesAnio[6] = "31";
  39.         mesesAnio[7] = "31";
  40.         mesesAnio[8] = "30";
  41.         mesesAnio[9] = "31";
  42.         mesesAnio[10] = "30";
  43.         mesesAnio[11] = "31";
  44.         int diasRestantes = (int) dias;
  45.         //variable almacenará el total de meses que hay en esos dias
  46.         int totalMeses = 0;
  47.         int mesActual = jCal.MONTH;
  48.         //Restar los dias de cada mes desde la fecha de ingreso hasta que ya no queden sufcientes dias para
  49.         // completar un mes.
  50.         for (int i=0; i<=11; i++ ){
  51.             //Validar año, si sumando 1 al mes actual supera el fin de año,
  52.             // setea la variable a principio de año
  53.             if ((mesActual+1)>=12){
  54.                 mesActual = i;
  55.             }
  56.             //Validar que el numero de dias resultantes de la resta de las 2 fechas, menos los dias
  57.             //del mes correspondiente sea mayor a cero, de ser asi totalMeses aumenta,continuar hasta
  58.             //que ya nos se cumpla.
  59.             if ((diasRestantes -Integer.parseInt(mesesAnio[mesActual]))>=0){
  60.                 totalMeses ++;
  61.                 diasRestantes = diasRestantes- Integer.parseInt(mesesAnio[mesActual]);
  62.                 mesActual ++;
  63.             }else{
  64.                 break;
  65.             }
  66.         }
  67.         //Resto de horas despues de sacar los dias
  68.         horas = horas % 24;
  69.         String salida ="";
  70.         if (totalMeses > 0){
  71.             if (totalMeses > 1)
  72.                 salida = salida+  String.valueOf(totalMeses)+" Meses,  ";
  73.             else
  74.                 salida = salida+  String.valueOf(totalMeses)+" Mes, ";
  75.         }
  76.         if (diasRestantes > 0){
  77.             if (diasRestantes > 1)
  78.                 salida = salida+  String.valueOf(diasRestantes)+" Dias, ";
  79.             else
  80.                 salida = salida+  String.valueOf(diasRestantes)+" Dia, ";
  81.         }
  82.        
  83.        
  84.          salida =salida +String.valueOf(horas)+":"+String.valueOf(minuto)+":"+String.valueOf(segundos)+".";
  85.         return salida;
  86.         }
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 01:10.