Is there Java class or some sample code that can convert a java Date or Timestamp into something like:
"3 hours"
" 20 seconds"
"25 minutes"
I need those strings in my web application to show how much it took to generate a file (in a pretty print way of course :) )
Thanks,
With JodaTime:
PeriodFormat.getDefault( ).print( Hours.THREE );
PeriodFormat.getDefault( ).print( Seconds.seconds( 25 ) );
PeriodFormat.getDefault( ).print( Minutes.minutes( 20 ) );
P.S. Also it's very easy to get the number of hours/seconds/minutes between 2 time points.
Using JodaTime is the best overall approach, but here's one way to do it without using any domain-specific libraries, using the ChoiceFormat
indirectly in the context of a 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();
}
Now you can have (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
You can of course extend this to include days/months/years/etc.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With