Learn through the super-clean Baeldung Pro experience:
>> Membership and Baeldung Pro.
No ads, dark-mode and 6 months free of IntelliJ Idea Ultimate to start with.
Last updated: March 19, 2024
Converting milliseconds to minutes and seconds can be very useful while dealing with time-related calculations in a Kotlin application. Furthermore, it can help improve the readability of time-related data by making them more user-friendly to interpret.
In this tutorial, we’ll learn multiple ways to convert milliseconds to minutes and seconds.
First, let’s initialize the millis variable with a sample value denoting milliseconds:
val millis:Long = 123456L
Now, we can apply the division operator to convert milliseconds to minutes:
val mins = millis / 60000
It’s important to note that Kotlin truncates the decimal portion when we divide between Int and Long values. So, mins will contain the whole number of minutes.
Next, we can calculate the remaining seconds value from millis using modulus (%) and division (/) operators:
val secs = (millis % 60000) / 1000
Finally, let’s validate that we’ve got the correct values in mins and secs variables:
assertEquals(2, mins)
assertEquals(3, secs)
The output looks correct.
In this section, we’ll use the kotlin.time package from the Kotlin standard library for solving our use case of converting milliseconds to minutes and seconds.
Let’s start by creating a duration object from millis using the toDuration() function:
val duration = millis.toDuration(DurationUnit.MILLISECONDS)
We must note that we passed DurationUnit.MILLISECONDS to specify that we’re measuring millis in milliseconds.
Further, we can get the minutes using the inWholeMinutes property of the duration object:
val mins = duration.inWholeMinutes
Furthermore, we can calculate the remaining duration using the minus() method and get the remaining seconds from the inWholeSeconds property:
val secs = duration.minus(mins.toDuration(DurationUnit.MINUTES)).inWholeSeconds
Lastly, let’s verify that our approach is giving the right results:
assertEquals(2, mins)
assertEquals(3, secs)
Fantastic! It looks correct.
Alternatively, we can use the extension properties from Duration.Companion to create duration objects conveniently.
First, to get the minutes, we can create a Duration object using millis.milliseconds and then retrieve the inWholeMinutes property:
val mins = millis.milliseconds.inWholeMinutes
Next, we can get the remaining seconds by subtracting the inWholeSeconds property value of the mins.minutes duration from that of millis.milliseconds:
val secs = millis.milliseconds.inWholeSeconds - mins.minutes.inWholeSeconds
Finally, let’s verify the result:
assertEquals(2, mins)
assertEquals(3, secs)
Perfect! It works as expected.
The kotlinx-datetime library is part of the Kotlin ecosystem and provides convenient APIs for working with date and time operations. In this section, we’ll use it to retrieve the minutes and seconds from the epoch milliseconds.
To use the kotlinx-datetime library, we must add the dependency for kotlinx-datetime-jvm in the project’s pom.xml:
<dependency>
<groupId>org.jetbrains.kotlinx</groupId>
<artifactId>kotlinx-datetime-jvm</artifactId>
<version>0.4.0</version>
</dependency>
It’s now available for use.
First, let’s set epochMillis with the epoch value:
val epochMillis: Long = 123456L
It’s important to note that this epoch value represents the “Thu Jan 01 1970 00:02:03” timestamp in UTC.
Now, let’s create an instant object using the fromEpochMilliseconds() method of the Instant class:
val instant = Instant.fromEpochMilliseconds(epochMillis)
The instant object represents an absolute timestamp in UTC (Coordinated Universal Time).
Further, we can obtain an equivalent localDateTime object using the TimeZone.UTC timezone and our instant object:
val localDateTime = instant.toLocalDateTime(TimeZone.UTC)
Next, we can use the hour, minute, and second properties of the localDateTime object to calculate the minutes and seconds:
val mins = localDateTime.hour * 60 + localDateTime.minute.toLong()
val secs = localDateTime.second.toLong()
We must note that the resultant values represent minutes and seconds elapsed on a specific day by the UTC clock.
Finally, let’s validate the results:
assertEquals(2, mins)
assertEquals(3, secs)
Great! We got this one right.
In this article, we started with an approach of using arithmetic operations to convert the minutes and seconds from milliseconds. Furthermore, we explored time-based APIs from the kotlin.time and kotlinx.datetime packages available in Kotlin standard and kotlinx-datetime libraries, respectively.