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 !!
Comments