Wednesday, 24 February 2016

time - How to convert Milliseconds to "X mins, x seconds" in Java?



I want to record the time using System.currentTimeMillis() when a user begins something in my program. When he finishes, I will subtract the current System.currentTimeMillis() from the start variable, and I want to show them the time elapsed using a human readable format such as "XX hours, XX mins, XX seconds" or even "XX mins, XX seconds" because its not likely to take someone an hour.



What's the best way to do this?


Answer



Use the java.util.concurrent.TimeUnit class:



String.format("%d min, %d sec", 
TimeUnit.MILLISECONDS.toMinutes(millis),

TimeUnit.MILLISECONDS.toSeconds(millis) -
TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(millis))
);


Note: TimeUnit is part of the Java 1.5 specification, but toMinutes was added as of Java 1.6.



To add a leading zero for values 0-9, just do:



String.format("%02d min, %02d sec", 

TimeUnit.MILLISECONDS.toMinutes(millis),
TimeUnit.MILLISECONDS.toSeconds(millis) -
TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(millis))
);


If TimeUnit or toMinutes are unsupported (such as on Android before API version 9), use the following equations:



int seconds = (int) (milliseconds / 1000) % 60 ;
int minutes = (int) ((milliseconds / (1000*60)) % 60);

int hours = (int) ((milliseconds / (1000*60*60)) % 24);
//etc...

No comments:

Post a Comment

c++ - Does curly brackets matter for empty constructor?

Those brackets declare an empty, inline constructor. In that case, with them, the constructor does exist, it merely does nothing more than t...