Thursday, February 28, 2019

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

plot explanation - Why did Peaches' mom hang on the tree? - Movies & TV

In the middle of the movie Ice Age: Continental Drift Peaches' mom asked Peaches to go to sleep. Then, she hung on the tree. This parti...