What Is the Java Date and Time API?
Java 8 Date and Time API
Java added a new Date and Time API in Java 8 version that consists of several classes, interfaces, and enum to handle the date and time.
Before Java 8, There was a java.util.Date class to create and handle date and time that has limitations like Not thread-safe, Poor design, and Difficult time zone handling.
The new Date and Time API is based on the ISO calendar system and all the classes are immutable and thread-safe.
The classes of java.time package represent the principle date-time concepts, including instants, durations, dates, times, time-zones, and periods.
Java Date Time API Classes
The new java.time package includes the various classes and enums that are tabled below.
| Class | Description |
|---|---|
| Clock | A clock providing access to the current instant, date, and time using a time-zone. |
| Duration | A time-based amount of time, such as '34.5 seconds'. |
| Instant | An instantaneous point on the time-line. |
| LocalDate | A date without a time-zone in the ISO-8601 calendar system, such as 2007-12-03. |
| LocalDateTime | A date-time without a time-zone in the ISO-8601 calendar system, such as 2007-12-03T10:15:30. |
| LocalTime | A time without a time-zone in the ISO-8601 calendar system, such as 10:15:30. |
| MonthDay | A month-day in the ISO-8601 calendar system, such as --12-03. |
| OffsetDateTime | A date-time with an offset from UTC/Greenwich in the ISO-8601 calendar system, such as 2007-12-03T10:15:30+01:00. |
| OffsetTime | A time with an offset from UTC/Greenwich in the ISO-8601 calendar system, such as 10:15:30+01:00. |
| Period | A date-based amount of time in the ISO-8601 calendar system, such as '2 years, 3 months and 4 days'. |
| Year | A year in the ISO-8601 calendar system, such as 2007. |
| YearMonth | A year-month in the ISO-8601 calendar system, such as 2007-12. |
| ZonedDateTime | A date-time with a time-zone in the ISO-8601 calendar system, such as 2007-12-03T10:15:30+01:00 Europe/Paris. |
| ZoneId | A time-zone ID, such as Europe/Paris. |
| ZoneOffset | A time-zone offset from Greenwich/UTC, such as +02:00. |
Java 8 Date Time API Enum
The following are the Enum present in java.time package.
| Enum | Description |
|---|---|
| DayOfWeek | A day-of-week, such as 'Tuesday'. |
| Month | A month-of-year, such as 'June'. |
Example: LocalDate Class
This class is available in java.time package. It represents a date without a time-zone in the ISO-8601 calendar system, such as 2007-12-03.
The LocalDate class is an immutable date-time object that is used to create a locale date. See the below example.
public class STDemo {
public static void main(String[] args){
LocalDate date = LocalDate.parse("2012-12-10");
System.out.println(date);
}
}Output:
2012-12-10
Example: LocalDateTime Class
This class is used to create a date with time but without a time-zone. It represents a date-time without a time-zone in the ISO-8601 calendar system, such as 2010-10-03T10:10:50.
The LocalDateTime class is an immutable date-time object that represents a date-time. We can use it to represent a date with time. For example, the value "2nd October 2007 at 13:45.30.123456789" can be stored in a LocalDateTime.
import java.time.LocalDateTime;
public class STDemo {
public static void main(String[] args){
LocalDateTime date = LocalDateTime.of(2012, 12, 10, 2, 30);
System.out.println(date);
}
}Output:
2012-12-10T02:30
Example: LocalTime Class
This class is used to create a local time object. It represents a time without a time-zone in the ISO-8601 calendar system, such as 11:10:30.
The LocalTime class is an immutable date-time object that represents a time, For example, the value "13:45.30.123456789" can be stored in a LocalTime. See the below example.
import java.time.LocalTime;
public class STDemo {
public static void main(String[] args){
LocalTime time = LocalTime.of(12, 12,30);
System.out.println(time);
}
}Output:
12:12:30
Example: ZonedDateTime Class
This class is used to create a date-time object with a time-zone. It represents a date-time with a time-zone in the ISO-8601 calendar system, such as 2017-10-03T10:10:30+05:30 Asia/Kolkata.
The ZonedDateTime class is an immutable representation of a date-time with a time-zone. This class stores all date and time fields. For example, the value "2nd October 2017 at 15:40.35.123456786 +05:30 in the Asia/Kolkata time-zone" can be stored in a ZonedDateTime.
import java.time.ZoneId;
import java.time.ZonedDateTime;
public class STDemo {
public static void main(String[] args){
ZonedDateTime time = ZonedDateTime.of(2015, 10, 15, 2, 10, 30, 0, ZoneId.systemDefault());
System.out.println(time);
}
}Output:
2015-10-15T02:10:30+05:30[Asia/Kolkata]
Example: OffSetDateTime Class
This class is used to create a date-time with an offset from UTC/Greenwich in the ISO-8601 calendar system, such as 2017-10-03T15:10:30+01:00.
The OffsetDateTime class is an immutable representation of a date-time with an offset. This class stores all date and time fields, as well as the offset from UTC/Greenwich. For example, the value "2nd October 2017 at 15:42.35.123456789 +02:00" can be stored in an OffsetDateTime.
import java.time.OffsetDateTime;
public class STDemo {
public static void main(String[] args){
OffsetDateTime date = OffsetDateTime.parse("2017-02-03T12:30:30+01:00");
System.out.println(date);
}
}Output:
2017-02-03T12:30:30+01:00
Example: OffsetTime Class
This class is used to store time with an offset from UTC/Greenwich in the ISO-8601 calendar system, such as 15:10:35+01:00.
The OffsetTime class is an immutable date-time object that represents a time. This class stores all time fields, as well as a zone offset. For example, the value "15:40.35.123456789+02:00" can be stored in an OffsetTime.
import java.time.OffsetTime;
public class STDemo {
public static void main(String[] args){
OffsetTime time = OffsetTime.parse("12:30:30+01:00");
System.out.println(time);
}
}Output:
12:30:30+01:00










