What is the difference between Java 8 Instant and LocalDateTime? -Detailed Guide

The Java 8 java.time API provides Instant and LocalDateTime classes to represent date-time values.
The main difference would be Instant represents a date-time value with precision to nanoseconds in UTC time-zone and whereas the LocalDateTime represent the date-time without time-zone.

In this tutorial, you will learn about what is Java 8 Instant and LocalDateTime in detail.

Instant

The Java 8 Instant returns a current time calculated based on the Epoch seconds since 1970-01-01T00:00:00UTC.
Instant will return UTC time by calculating the offset difference with the current system time.

Use Instant for applications requiring exact time, like System timestamps and time difference calculations.

Check this tutorial to convert a Date to Instant, How to convert an Instant to date format in Java.

Code

    import java.time.Instant;

    //current UTC Time : 20 Feb 2023 T 19:02:46
    //current system timezone : Australia/Sydney, current date : 21 Feb 2023, current time: 06:02:46
    //main
    Instant instant = Instant.now();  
    System.out.println(instant);  //2023-02-20T19:02:46.789023900Z

In the above example, The system time zone is “Australia/Sydney”, which is +11:00 hours from UTC. Instant return time zone independent value matches the UTC time(2023-02-20T19:02:46.789023900Z) 11:00 hours behind the system time. Instant always calculates time-based on the offset difference with the current system time zone to match the UTC time.

LocalDateTime

The Java 8 LocalDateTime represent only date and time without any reference to the time zone. The LocalDateTime value can be converted to Instant if the time zone is known.

To convert LocalDateTime to Instant, check this tutorial, How to convert an Instant to Java 8 LocalDateTime.

Use LocalDateTime for scenarios to represent only date-time without a time zone. It will return the date-time based on the system time zone.

Code

    import java.time.Instant;  
    import java.time.LocalDateTime;  
    import java.time.ZoneOffset;

    //current UTC Time : 20 Feb 2023 T 19:02:46
    //current system timezone : Australia/Sydney, current date : 21 Feb 2023, current time: 06:02:46
    //main
    LocalDateTime localDateTime = LocalDateTime.now();  
    System.out.println(localDateTime);  //2023-02-21T06:02:46.872677100

In the above example, LocalDateTime returns the date-time(2023-02-21T06:02:46.872677100) value without the time zone. The date-time calculation is based on the system time zone (Australia/Sydney).

To convert an milliseconds to LocalDateTime value, read this article; How to convert long Epoch time in Milliseconds to Java 8 LocalDateTime.

Related Topics

Leave a Comment