2010-05-01 22 views
11

cómo convertir minutos en días horas y minutos en java (tenemos una semana aquí, 7 días)Cómo convertir minutos a días, horas, minutos

public String timeConvert(int time){ 
    String t = ""; 

    int h = 00; 
    int m = 00; 

    // h= (int) (time/60); 
    // m = (int) (time % 60); 

    // if(h>=24) h=00; 

    if((time>=0) && (time<=24*60)){ 
     h= (int) (time/60); 
     m = (int) (time % 60); 
    }else if((time>24*60) && (time<=24*60*2)){ 
     h= (int) (time/(1440)); 
     m = (int) (time % (1440)); 
    }else if((time>24*60*2) && (time<=24*60*3)){ 
     h= (int) (time/(2880)); 
     m = (int) (time % (2880)); 
    }else if((time>24*60*3) && (time<=24*60*4)){ 
     h= (int) (time/(2880*2)); 
     m = (int) (time % (2880*2)); 
    }else if((time>24*60*4) && (time<=24*60*5)){ 
     h= (int) (time/(2880*3)); 
     m = (int) (time % (2880*3)); 
    }else if((time>24*60*5) && (time<=24*60*6)){ 
     h= (int) (time/(2880*4)); 
     m = (int) (time % (2880*4)); 
    }else if((time>24*60*6) && (time<=24*60*7)){ 
     h= (int) (time/(2880*5)); 
     m = (int) (time % (2880*5)); 
    } 

    t =h+":"+m ; 
    return t; 
} 

Probé este pero no funcionan

gracias

Respuesta

21

Una manera más corta. (Se asume el tiempo> = 0)

public String timeConvert(int time) { 
    return time/24/60 + ":" + time/60%24 + ':' + time%60; 
} 
8

Si utiliza Java 6, TimeUnit enum puede ser útil. Por ejemplo:

TimeUnit.HOURS.convert(10, TimeUnit.DAYS) 

Esta llamada estática convierte 10 días en unidades por hora, y devuelve 240. Se puede jugar con unidades de tiempo a partir de NANO SEGUNDOS y terminando con DÍAS.

En realidad, TimeUnit está disponible en Java 5, pero en la versión 6 se agregaron más unidades.

--EDIT-- Ahora que entiendo mejor su pregunta, utilice el enfoque de división y resto como en la respuesta de Romain. Mi sugerencia es útil solo para la conversión a una sola unidad de tiempo.

+0

Gracias, pero donno cómo usar esto, no hay ninguna documentación al respecto – Eddinho

+0

@tuxou: Existe el Javadoc –

15

Si quiere hacer esto usted mismo, haga lo contrario.

  1. Divide el número por 60 * 24. (Eso hará que el número de días.)
  2. Divide el resto por 60. (Eso le dará el número de horas.)
  3. El resto de # 2 es la cantidad de minutos.
+0

pero no tengo más que un día mis minutos comienzan en 0 extremos de 10080 i tendrá como 136: 30 con este algoritmo – Eddinho

+3

El método de Romain funciona bien siempre que tome tanto el cociente como el resto en cada uno de los primeros dos casos. Si tiene 1600 minutos y divide por (60 * 24), el cociente es 1 y el resto es 160, que luego divide por 60. El cociente de eso es 2 y el resto es 40. Por lo tanto, 1600 minutos equivalen a 1 día, 2 horas y 40 minutos. –

+0

@Adrian Lopez - Gracias por la explicación +1 –

4

1) Su código es repetitivo. Este es un signo de mal código en mi opinión.

2) El divisor no debe cambiar con el número de días, porque el número de días tiene poco que ver con la cantidad de minutos en una hora.

Más allá de eso, mira el enfoque de Romain Hippeau, él te dijo cómo hacerlo.

2

y la respuesta es:

public String timeConvert(int time){ 
    String t = ""; 

    int j = time/(24*60); 
    int h= (time%(24*60))/60; 
    int m = (time%(24*60)) % 60; 



    t =j + ":" + h + ":" + m; 
    return t; 
} 

¿qué piensa usted acerca de este código?

+0

Buen enfoque en general, pero mis sugerencias para mejorar el estilo serían: a) No usar nombres de variable de una sola letra b) Evitar las variables de pre-declaración con valores que nunca se usan, es mejor que hacer, por ejemplo "int hora = (tiempo% (24 * 60))/60;" – mikera

+0

No estoy de acuerdo con el punto b, donde Mikira recomienda que introduzcas la mayor cantidad de código posible en una línea. Sin embargo, si separa las variables en pasos del tamaño de un mordisco como lo hizo Eddinho, entonces es más fácil para otros revisar su código y ver qué está sucediendo. En cuanto al punto a) Este es un buen punto. También me alejaría de las variables de una sola letra, a menos que sean temporales mientras creo un nombre adecuado. En estos casos, describiría el tipo de variable, p. s para cadena, i para int, dt para DataTable, etc. Excelente solución, Eddinho. ¡Funciona, y elegantemente! –

0

estoy usando este código. también puede ayudar.

private String getText(int minutes){ 

    int weeks = minutes/10080; 
    int aboveWeeks = minutes % 10080; 
    int days = aboveWeeks/1440; 
    int aboveDays = aboveWeeks % 1440; 
    int hours = aboveDays/60; 
    int aboveHours = aboveDays % 60; 
    int minute = aboveHours/60; 

    if(weeks > 0 && days > 0) { 
     if(weeks > 1 && days > 1){ 
      return weeks + " weeks " + days + " days before"; 
     } else { 
      return weeks + " weeks " + days + " day before"; 
     } 
    } else if (weeks > 0){ 
     if (weeks > 1){ 
      return weeks + " weeks before"; 
     } else { 
      return weeks + " week before"; 
     } 
    } else if(days > 0 && hours > 0){ 
     if(days > 1 && hours > 1){ 
      return days + " days " + hours + " hours before"; 
     } else { 
      return days + " days " + hours + " hour before"; 
     } 
    } else if(days > 0){ 
     if (days > 1){ 
      return days + " days before"; 
     } else { 
      return days + " day before"; 
     } 
    } else if(hours > 0 && minute > 0){ 
     if(hours > 1 && minute > 1){ 
      return hours + " hours " + minute + " minutes before"; 
     } else { 
      return hours + " hours " + minute + " minute before"; 
     } 
    } else if(hours > 0){ 
     if (hours > 1){ 
      return hours + " hours before"; 
     } else { 
      return hours + " hour before"; 
     } 
    } else { 
     if (minutes > 1){ 
      return minutes + " minutes before"; 
     } else { 
      return minutes + " minute before"; 
     } 
    } 
} 
0
class time{ 
    public static void main (String args[]){ 
     System.out.println("Hello"); 
     int duration=1500; 
     String testDuration = ""; 

     if(duration < 60){ 
      testDuration = duration + " minutes"; 
     } 
     else{ 

      if((duration/60)<24) 
      { 
       if((duration%60)==0){ 
        testDuration = (duration/60) + " hours"; 
       } 
       else{ 
      testDuration = (duration/60) + " hours," + (duration%60) + " minutes"; 
       } 
      } 
      else{ 

       if((duration%60)==0){ 
        if(((duration/60)%24)==0){ 
         testDuration = ((duration/24)/60) + " days,"; 

        } 
        else{ 
        testDuration = ((duration/24)/60) + " days," + (duration/60)%24 +"hours"; 
        } 
       } 
        else{ 
       testDuration = ((duration/24)/60) + " days," + (duration/60)%24 +"hours"+ (duration%60) + " minutes"; 
        } 
      } 
     } 

     System.out.println(testDuration); 
    } 
} 
Cuestiones relacionadas