The java.time.Instant
class in the Java Date-Time API is an immutable representation of a point in time. It stores a long count of seconds from the epoch of the first moment of 1970 UTC, plus a number of nanoseconds for the further precision within that second.
The java.time.LocalDate
class represents a date without a time or time zone. It is used to represent just a date as year-month-day (e.g., 2023-03-27) in the ISO-8601 calendar system.
The java.time.LocalTime
class represents a time without a date or time zone. It is used to represent just a time as hour-minute-second (e.g., 13:45:20).
It’s also worth noting that Instant
class is part of Java 8’s new date and time API which was brought in to address the shortcomings of the old java.util.Date
and java.util.Calendar
API.
Here’s a quick example of how to use the Instant
class:
package org.kodejava.datetime;
import java.time.Instant;
public class InstantExample {
public static void main(String[] args) {
// Get the current point in time
Instant now = Instant.now();
System.out.println("Current time: " + now);
// Add duration of 500 seconds from now
Instant later = now.plusSeconds(500);
System.out.println("500 seconds later: " + later);
// Subtract duration of 500 seconds from now
Instant earlier = now.minusSeconds(500);
System.out.println("500 seconds earlier: " + earlier);
// Compare two Instants
int comparison = now.compareTo(later);
if (comparison < 0) {
System.out.println("Now is earlier than later");
} else if (comparison > 0) {
System.out.println("Now is later than later");
} else {
System.out.println("Now and later are at the same time");
}
}
}
Output:
Current time: 2024-01-18T09:26:56.152268Z
500 seconds later: 2024-01-18T09:35:16.152268Z
500 seconds earlier: 2024-01-18T09:18:36.152268Z
Now is earlier than later
In this example, Instant.now()
is used to get the current Instant. Various methods like plusSeconds()
, minusSeconds()
, and compareTo()
are used to manipulate and compare the Instant
.
LocalDate
and LocalTime
are local in the sense that they represent date and time from the context of the observer, without a time zone.
To connect Instant
with LocalDate
and LocalTime
, you need a time zone. This is because Instant
is in UTC and LocalDate
/LocalTime
are in a local time zone, so you need to explicitly provide a conversion between them.
Here’s how you convert an Instant
to a LocalDate
and a LocalTime
:
package org.kodejava.datetime;
import java.time.*;
public class InstantConvertExample {
public static void main(String[] args) {
Instant now = Instant.now();
System.out.println("Instant: " + now);
// Get the system default timezone
ZoneId zoneId = ZoneId.systemDefault();
LocalDate localDate = now.atZone(zoneId).toLocalDate();
System.out.println("LocalDate: " + localDate);
LocalTime localTime = now.atZone(zoneId).toLocalTime();
System.out.println("LocalTime: " + localTime);
}
}
Here Instant.now()
gives the current timestamp. .atZone(ZoneId.systemDefault())
converts it to ZonedDateTime
which is then converted to LocalDate
and LocalTime
by using .toLocalDate()
and .toLocalTime()
respectively.
You can also go from LocalDate
and LocalTime
back to Instant
. Here’s how:
package org.kodejava.datetime;
import java.time.*;
public class ToInstantExample {
public static void main(String[] args) {
LocalDate localDate = LocalDate.now();
LocalTime localTime = LocalTime.now();
ZoneId zoneId = ZoneId.systemDefault();
Instant instantFromDateAndTime = LocalDateTime.of(localDate, localTime).atZone(zoneId).toInstant();
System.out.println("Instant from LocalDate and LocalTime: " + instantFromDateAndTime);
}
}
- How do I get number of each day for a certain month in Java? - September 8, 2024
- How do I get operating system process information using ProcessHandle? - July 22, 2024
- How do I sum a BigDecimal property of a list of objects using Java Stream API? - July 22, 2024