The Instant class represents an instantaneous point on the time-line. Conversion to and from a LocalDate requires a time-zone. Unlike some other date and time libraries, JSR-310 will not select the time-zone for you automatically, so you must provide it.

LocalDate date = LocalDate.now();
Instant instant = date.atStartOfDay(ZoneId.systemDefault()).toInstant();

This example uses the default time-zone of the JVM - ZoneId.systemDefault() - to perform the conversion. See here for a longer answer to a related question.


Update: The accepted answer uses LocalDateTime::toInstant(ZoneOffset) which only accepts ZoneOffset. This answer uses LocalDate::atStartOfDay(ZoneId) which accepts any ZoneId. As such, this answer is generally more useful (and probably should be the accepted one).

PS. I was the main author of the API

Answer from JodaStephen on Stack Overflow
🌐
How to do in Java
howtodoinjava.com › home › java date time › java – convert instant to localdatetime, localdate or localtime
Java - Convert Instant to LocalDateTime, LocalDate or LocalTime
June 5, 2025 - Learn to convert a given Instant to LocalDateTime, LocalDate, or LocalTime instances in the current system timezone or a specified timezone in Java. 1. Difference between Instant and LocalDateTime An Instant is an instantaneous point on the time-line without any timezone information associated with it.
Top answer
1 of 6
219

Java 9+

LocalDate.ofInstant(...) arrived in Java 9.

Instant instant = Instant.parse("2020-01-23T00:00:00Z");
ZoneId zone = ZoneId.of("America/Edmonton");
LocalDate date = LocalDate.ofInstant(instant, zone);

See code run live at IdeOne.com.

Notice the date is 22nd rather than 23rd as that time zone uses an offset several hours before UTC.

2020-01-22

Java 8

If you are using Java 8, then you could use ZonedDateTime's toLocalDate() method:

yourInstant.atZone(yourZoneId).toLocalDate()
2 of 6
45

Other answers provided the mechanics for the transformation, but I wanted to add some background on the meaning of such transformation which hopefully helps explain why it works the way it works.


LocalDate and Instant seem similar – they both hold date(/time) information without the time zone information. However, they have quite a different meaning.

Instant represents a point in time unambiguously. The representation does not explicitly contain any time zone, but implicitly it refers to the UTC time line.

LocalDateTime (and LocalDate) is ambiguous, because it represents a point in the local timeline, which implicitly refers to the local time zone.

So, in order to correctly transform an Instant into a LocalDateTime (conceptually – some of these steps are bundled together into a single operation in the implementation) you need to:
1. convert the Instant into a ZonedDateTime by applying the UTC time zone info
2. change the time zone from UTC to the local time zone (which implies applying the relevant time zone offset) which gives you another ZonedDateTime (with different time zone)
3. convert the ZonedDateTime into a LocalDateTime which makes the time zone implicit (local) by removing the time zone info.

Finally, you can drop the time-part of LocalDateTime and end up with the LocalDate.

🌐
Mkyong
mkyong.com › home › java8 › java 8 – convert instant to localdatetime
Java 8 - Convert Instant to LocalDateTime - Mkyong.com
August 19, 2016 - package com.mkyong.date; import ... // Convert LocalDateTime to Instant, UTC+0 Instant instant = dateTime.toInstant(ZoneOffset.UTC); System.out.println("Instant : " + instant); } }...
🌐
DigitalOcean
digitalocean.com › community › tutorials › java-8-date-localdate-localdatetime-instant
Java 8 Date - LocalDate, LocalDateTime, Instant | DigitalOcean
August 3, 2022 - Default format of LocalDate=2014-04-28 28::Apr::2014 20140428 Default format of LocalDateTime=2014-04-28T16:25:49.341 28::Apr::2014 16::25::49 20140428 Default format of Instant=2014-04-28T23:25:49.342Z Default format after parsing = 2014-04-27T21:39:48 · Legacy Date/Time classes are used in almost all the applications, so having backward compatibility is a must. That’s why there are several utility methods through which we can convert Legacy classes to new classes and vice versa. package com.journaldev.java8.time; import java.time.Instant; import java.time.LocalDateTime; import java.time.Z
🌐
Baeldung
baeldung.com › home › java › java dates › convert date to localdate or localdatetime and back
Convert Date to LocalDate or LocalDateTime and Back | Baeldung
March 26, 2025 - Now let’s look at the ways to convert java.util.Date to LocalDateTime instance · To get a LocalDateTime instance, we can similarly use an intermediary ZonedDateTime and then use the toLocalDateTime() API.
🌐
ConcretePage
concretepage.com › java › java-8 › java-localdate-to-instant-timestamp
Java LocalDate to Instant and Timestamp
To convert LocalDate to Instant, we will convert LocalDate into ZonedDateTime or Timestamp and then calling their toInstant() method we get Instant.
🌐
Java2Blog
java2blog.com › home › core java › java 8 › convert localdate to instant in java
Convert LocalDate to Instant in Java - Java2Blog
February 17, 2022 - Use ZoneDateTime‘s toInstant() method to convert LocalDate to Instant in Java.
🌐
ConcretePage
concretepage.com › java › java-8 › convert-between-java-localdatetime-instant
Convert between Java LocalDateTime and Instant
Instant instant = localDateTime.toInstant(ZoneOffset.UTC); LocalDateTime.toEpochSecond() converts this date-time to the number of seconds from the epoch of 1970-01-01T00:00:00Z. Find the Java doc.
Find elsewhere
🌐
GeeksforGeeks
geeksforgeeks.org › java › localdate-ofinstant-method-in-java-with-examples
LocalDate ofInstant() method in Java with Examples - GeeksforGeeks
May 17, 2020 - instant: It is of Instant type and represents the instant passed to create the date. zone: It is of ZoneId type and represent the offset. Return Value: This method returns the localdate.
🌐
Benchresources
benchresources.net › home › java › java 8 – how to convert instant to localdate ?
Java 8 – How to convert Instant to LocalDate ? - BenchResources.Net
September 4, 2022 - First step is to convert Instant to LocalDateTime using LocalDateTime.ofInstant() method passing instant & ZoneOffset · After converting to LocalDateTime, use/invoke toLocalDate() method of LocalDateTime to convert into LocalDate as shown in the below illustration · package in.bench.reso...
🌐
Benchresources
benchresources.net › home › java › java 8 – how to convert localdate to an instant ?
Java 8 – How to convert LocalDate to an Instant ? - BenchResources.Net
September 4, 2022 - In this article, we will learn how to convert LocalDate to Instant using atStartOfDay() method of LocalDate provided in Java 1.8 version For Instant to Read More
🌐
Oracle
docs.oracle.com › en › java › javase › 21 › docs › api › java.base › java › time › LocalDate.html
LocalDate (Java SE 21 & JDK 21)
January 20, 2026 - If the field is not a ChronoField, then the result of this method is obtained by invoking TemporalField.adjustInto(Temporal, long) passing this as the argument. In this case, the field determines whether and how to adjust the instant. This instance is immutable and unaffected by this method call. ... Returns a copy of this LocalDate with the year altered.
🌐
Codemia
codemia.io › knowledge-hub › path › how_to_convert_a_localdate_to_an_instant
How to convert a LocalDate to an Instant?
Enhance your system design skills with over 120 practice problems, detailed solutions, and hands-on exercises
🌐
Baeldung
baeldung.com › home › java › java dates › difference between instant and localdatetime
Difference Between Instant and LocalDateTime | Baeldung
January 8, 2024 - So what happens if we need to deal with time zones? We saw above that both Instant and LocalDateTime aren’t equipped for this, but luckily Java provides a number of other classes that handle time zones.
🌐
DZone
dzone.com › coding › java › java 8 apis: java.util.time - instant, localdate, localtime, and localdatetime
Java 8 APIs: java.util.time - Instant, LocalDate, LocalTime, and LocalDateTime
July 19, 2013 - LocalDate represents a date without a time zone, such as 1-1-2000. LocalTime represents time without a time zone, such as 04:44:59.12 - unlike Instant which is an offset from the Java epoch and as such can be calculated into a precise point of time these two are just date or time without any relation to the epoch - a human readable date and time.
🌐
Blogger
javahungry.blogspot.com › 2024 › 03 › localdate-to-instan.html
Convert LocalDate to Instant in Java [3 ways] | Java Hungry
Java developers tutorials and coding. ... In this post, I will be sharing how to convert LocalDate to Instant in Java with examples. There are three ways to achieve our goal of converting LocalDate to Instant in Java: 1. Using LocalDate class atTime() method 2.
🌐
TutorialsPoint
tutorialspoint.com › java-program-to-convert-instant-to-localdatetime
Java Program to convert Instant to LocalDateTime
import java.time.Instant; import java.time.LocalDateTime; import java.time.ZoneId; import java.util.Date; public class Demo { public static void main(String[] args) { Instant instant = new Date().toInstant(); LocalDateTime date = LocalDateTime.ofInstant(instant, ZoneId.of(ZoneId.SHORT_IDS....
🌐
ConcretePage
concretepage.com › questions › 877
Convert LocalDate to Instant in Java
LocalDate localDate = LocalDate.now(); Instant instant = LocalDateTime.of(localDate, LocalTime.MIDNIGHT) .atZone(ZoneId.systemDefault()) .toInstant();
🌐
Oracle
docs.oracle.com › en › java › javase › 11 › docs › api › java.base › java › time › LocalDate.html
LocalDate (Java SE 11 & JDK 11 )
January 20, 2026 - If the field is not a ChronoField, then the result of this method is obtained by invoking TemporalField.adjustInto(Temporal, long) passing this as the argument. In this case, the field determines whether and how to adjust the instant. This instance is immutable and unaffected by this method call. ... Returns a copy of this LocalDate with the year altered.