Format Milliseconds Duration to Hours, Minutes and Seconds

Learn to convert a given duration in milliseconds to hours, minutes and seconds; and format to HH:mm:ss or any other custom pattern.

1. Using Duration APIs

If we know the arithmetic formulas to calculate the hours, minutes or seconds from a given amount of milliseconds then we can use the Duration class methods and apply those calculations ourselves.

Duration class models a quantity or amount of time in terms of seconds and nanoseconds. It provides methods for other duration-based time units such as toHours(), toMinutes() and getSeconds(). We can use these methods to get time in the specific unit and get the modulo to extract the exact amount.

long millis = 54321000;

Duration duration = Duration.ofMillis(millis);

long h = duration.toHours();
long m = duration.toMinutes() % 60;
long s = duration.getSeconds() % 60;

String timeInHms = String.format("%02d:%02d:%02d", h, m, s);

System.out.println(timeInHms);	//15:05:21

2. Apache Common’s DurationFormatUtils

The DurationFormatUtils class provides formatting utilities and constants. Its formatDuration(durationMillis, format) method can be used to format the specified duration in a specified format.

It takes an optional third parameter padWithZeros that specifies whether to pad the left-hand side of numbers with 0’s. For example, if we want to write ‘5’ to ’05’ then we should pass the third argument as true.

long millis = 54321000;

String timeInHms = DurationFormatUtils
	.formatDuration(millis, "HH:mm:ss", true);

System.out.println(timeInHms);	//15:05:21

//Without padding

timeInHms = DurationFormatUtils
	.formatDuration(millis, "HH:mm:ss", false);

System.out.println(timeInHms);	//15:5:21

To use this class, include the latest version of commons-lang from Maven repository.

<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-lang3</artifactId>
    <version>3.12.0</version>
</dependency>

3. Conclusion

In this short Java tutorial, we learned to convert a given duration in milliseconds to a formatted string containing hours, minutes and seconds. This information can be useful in printing the logs for long-running jobs where jobs may be running for hours.

Happy Learning !!

Sourcecode on Github

Was this post helpful?

Join 7000+ Awesome Developers

Get the latest updates from industry, awesome resources, blog updates and much more.

* We do not spam !!

Leave a Comment

HowToDoInJava

A blog about Java and related technologies, the best practices, algorithms, and interview questions.