Skip to content
DeveloperMemos

System.currentTimeMillis Alternatives (Android)

Android, System.currentTimeMillis, Date and Time1 min read

In Android development, obtaining the current system time is a common requirement for various tasks. The System.currentTimeMillis() method has traditionally been used to retrieve the current timestamp, but there are alternative approaches that offer more flexibility and are better for unit testing. In this article, we will explore some of these alternatives and demonstrate how they can be utilized effectively in your Android applications.

Using java.time.Instant

Since the release of Java 8, the java.time package provides a modern date and time API that offers improved functionality over the older java.util.Date and java.util.Calendar classes. With the introduction of Kotlin in Android development, we can leverage this API to obtain the current timestamp.

1import java.time.Instant
2
3val currentTimeMillis = Instant.now().toEpochMilli()

By using Instant.now(), we can retrieve the current system time as an Instant object, and then convert it to milliseconds using the toEpochMilli() method. This approach is recommended for new projects or when targeting devices running Android API level 26 (Android 8.0 Oreo) or higher.

Utilizing java.util.Calendar

For compatibility with older versions of Android where the java.time API might not be available, we can rely on the java.util.Calendar class to obtain the current timestamp.

1import java.util.Calendar
2
3val currentTimeMillis = Calendar.getInstance().timeInMillis

The Calendar.getInstance() method returns a Calendar instance representing the current date and time. We can then retrieve the timestamp using the timeInMillis property. Keep in mind that this approach is considered legacy and lacks some of the improvements provided by the java.time API.

Leveraging java.util.Date

If you're working with legacy code that still relies on the java.util.Date class, you can use it to obtain the current timestamp as well.

1import java.util.Date
2
3val currentTimeMillis = Date().time

By creating a new Date object without any arguments, we get an instance representing the current system time. We can then retrieve the timestamp using the time property. However, it's worth noting that the java.util.Date class has limitations and is generally recommended to be avoided in favor of the newer APIs.


By utilizing java.time.Instant, java.util.Calendar, or java.util.Date, we can effectively retrieve the current system time in milliseconds. Depending on your project requirements and target SDK versions, you can choose the approach that best suits your needs. It's essential to adapt to modern APIs like java.time when possible to leverage improved functionality and maintain compatibility with recent Android versions.