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.
Con el 'TimeZone' correcto, es factible: http://stackoverflow.com/questions/2705674 – trashgod