1. Overview
In this short tutorial, we’ll learn how to extract the year, month, and day from a given Date in Java.
We’ll discuss how to extract these values using the legacy java.util.Date class, using the java.sql.Timestamp and also by using the new date-time library of Java 8.
In Java 8, a whole new date and time library was introduced for a number of good reasons. Besides other advantages, the new library provides a better API for operations, such as extracting Year, Month, Day etc. from a given Date.
For a more detailed article on the new date-time library, have a look here.
2. Using LocalDate
The new java.time package contains several classes that can be used for representing Date.
Each class differs by the additional information it stores in addition to the Date.
The basic LocalDate just contains the date information, while LocalDateTime contains date and time information.
Similarly, more advanced classes, such as OffsetDateTime and ZonedDateTime, contain additional information about offset from UTC and about time-zone, respectively.
In any case, all of these classes support direct methods to extract Year, Month, and Day information.
Let’s explore these methods to extract information from a LocalDate instance named localDate.
2.1. Get Year
To extract Year, LocalDate simply provides a getYear method:
localDate.getYear();
2.2. Get Month
Similarly, to extract Month, we’ll use the getMonthValue API:
localDate.getMonthValue();
Unlike Calendar, Months in LocalDate are indexed from 1; for January, this will return 1.
2.3. Get Day
Finally, to extract Day, we have the getDayOfMonth method:
localDate.getDayOfMonth();
3. Using java.util.Date
For a given java.util.Date, to extract individual fields such as Year, Month, Day, etc., the first step we need to do is convert it to a Calendar instance:
Date date = // the date instance
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
Once we have a Calendar instance, we can directly invoke its get method, and provide the specific field that we want to extract.
We can use constants present in Calendar to extract specific fields.
3.1. Get Year
To extract the year, we can invoke get by passing Calendar.YEAR as an argument:
calendar.get(Calendar.YEAR);
3.2. Get Month
Similarly, we can invoke get by passing Calendar*.MONTH* as an argument to extract the month:
calendar.get(Calendar.MONTH);
Please note that months in the Calendar are zero-indexed. For January, this method returns 0.
3.3. Get Day
Finally, to extract the day, we invoke get by passing Calendar.DAY_OF_MONTH as an argument:
calendar.get(Calendar.DAY_OF_MONTH);
4. Using java.sql.Timestamp
For a given java.sql.Timestamp, to extract individual fields such as Year, Month, Day, etc., the first step we need to do is convert it to a Calendar instance:
Timestamp timestamp = // the timestamp instance
Calendar calendar = Calendar.getInstance();
calendar.setTime(timestamp);
Once we have a Calendar instance, we can directly invoke its get method, and provide the specific field that we want to extract.
We can use constants present in Calendar to extract specific fields as we saw earlier.
5. Conclusion
In this brief article, we explored how to extract integer values of Year, Month, and Day from Date in Java.
We learned how to extract these values using the old Date and Calendar classes, using Timestamp, as well as using the new date-time library of Java8.
The complete source code for the snippets used in this article is available over on GitHub.