2010-08-27 14 views
5

C'è classe Java o qualche codice di esempio che può convertire una data Java o timestamp in qualcosa di simile:Java abbastanza stampa per la durata

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

ho bisogno di quelle stringhe nella mia applicazione web per mostrare quanto ci sono voluti per generare un file (in un modo di stampa piuttosto ovviamente :))

Grazie,

risposta

8

Con JodaTime:

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

PS Inoltre è molto facile ottenere il numero di ore/secondi/minuti tra 2 punti di tempo.

1

Questo suona molto simile TimeAgo. Potresti essere in grado di sfruttare il codice qui per formattare durate come questa.

2

è possibile ottenere le ore, i minuti ei secondi da Java Calendar classe e poi concat loro con quello che mai ti piace (ore, 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

utilizzando JodaTime è il miglior approccio globale, ma qui è un modo per farlo senza l'utilizzo di librerie specifiche del dominio, utilizzando il ChoiceFormat indirettamente nel contesto di una 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(); 
} 

Ora è possibile avere (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 

Ovviamente è possibile estenderlo per includere giorni/mesi/anni/ecc.

Problemi correlati