2010-08-27 15 views
5

¿Hay clase Java o un código de ejemplo que puede convertir una fecha Java o marca de tiempo en algo así como:Java impresión bonita de duración

"3 hours" 
" 20 seconds" 
"25 minutes" 

necesito esas cadenas en mi aplicación web para mostrar cuánto se tardó en generar un archivo (de una manera bastante impresión por supuesto :))

Gracias,

Respuesta

8

Con JodaTime:

PeriodFormat.getDefault().print(Hours.THREE); 
PeriodFormat.getDefault().print(Seconds.seconds(25)); 
PeriodFormat.getDefault().print(Minutes.minutes(20)); 

PD También es muy fácil obtener la cantidad de horas/segundos/minutos entre 2 puntos de tiempo.

1

Esto suena muy parecido a TimeAgo. Puede aprovechar el código para formatear duraciones como esta.

2

, usted puede obtener las horas, minutos y segundos de la clase java Calendar y luego concat con lo que desee (horas, min ...)

Calendar c = Calendar.getInstance(); 
c.setTimeinMillis(<the time in milli second format (a long number)>); 

int hours = c.get(Calendar.HOUR); 
int mins = c.get(Calendar.MIN); 
... 
3

usando JodaTime es el mejor enfoque general, pero aquí es una manera de hacerlo sin necesidad de utilizar ninguna biblioteca de dominio específico, utilizando el ChoiceFormat indirectamente en el contexto de un MessageFormat:

static String choiceFor(int index, String noun) { 
    return "{index,choice,0#|1#1 noun |1<{index,number,integer} nouns }" 
     .replace("index", String.valueOf(index)) 
     .replace("noun", noun); 
} 
static String prettyPrint(int h, int m, int s) { 
    String fmt = 
     choiceFor(0, "hour") + 
     choiceFor(1, "minute") + 
     choiceFor(2, "second"); 
    return java.text.MessageFormat.format(fmt, h, m, s).trim(); 
} 

Ahora usted puede tener (as seen on ideone.com):

System.out.println(prettyPrint(1,2,3)); 
    // 1 hour 2 minutes 3 seconds 

    System.out.println(prettyPrint(0,0,7)); 
    // 7 seconds 

    System.out.println(prettyPrint(1,0,1)); 
    // 1 hour 1 second 

    System.out.println(prettyPrint(0,2,0)); 
    // 2 minutes 

Por supuesto, puede ampliar esto para incluir días/meses/años/etc.

Cuestiones relacionadas