Ver Mensaje Individual
  #3 (permalink)  
Antiguo 06/08/2009, 15:50
RockXellos
 
Fecha de Ingreso: abril-2009
Mensajes: 30
Antigüedad: 15 años, 8 meses
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.         }