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.
Con il giusto 'TimeZone', è fattibile: http://stackoverflow.com/questions/2705674 – trashgod