Course – LS – All

Get started with Spring and Spring Boot, through the Learn Spring course:

>> CHECK OUT THE COURSE

1. Overview

Java 8 introduced a new Date Time API that makes it easy to work with date and time in Java. It provides different methods to manipulate date and time.

In this tutorial, we’ll explore how to get the start and end dates of a year using the Date Time API and Calendar class.

2. Using the Date Time API

The LocalDate and TemporalAdjuster classes in the Date Time API make it easy to get the start and end dates of a year.

Here’s an example using these classes:

@Test
void givenCurrentDate_whenGettingFirstAndLastDayOfYear_thenCorrectDatesReturned() {
    LocalDate today = LocalDate.now();
    LocalDate firstDay = today.with(firstDayOfYear());
    LocalDate lastDay = today.with(lastDayOfYear());

    assertEquals("2023-01-01", firstDay.toString());
    assertEquals("2023-12-31", lastDay.toString());
}

Firstly, we create an object of LocalDate to get the current date. Next, we get the first day of the year by invoking with() and firstDayOfYear() on the object today of the current date.

Also, we invoke the with() and lastDayOfYear() on today to get the last day of the year.

Notably, the firstDayOfYear() and lastDayOfYear() are static methods from the TemporalAdjuster class.

Finally, we assert that the first and last days of the year are equal to the expected result.

3. Using the Calendar and Date Classes

The legacy Calendar and Date classes can also get the year’s start and end dates.

3.1. Getting the Start of a Year

Let’s get the start of a year using Calendar and Date:

@Test
void givenCalendarWithSpecificDate_whenFormattingToISO8601_thenFormattedDateMatches() {
    Calendar cal = Calendar.getInstance();
    cal.set(Calendar.YEAR, 2023);
    cal.set(Calendar.DAY_OF_YEAR, 1);
    Date firstDay = cal.getTime();
        
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
    String formattedDate = sdf.format(firstDay);
    
    assertEquals("2023-01-01", formattedDate);
}

Here, we create a new instance of Calendar and set the year and day of the year. Then, we get the Date object and format it to the expected start date.

Finally, we assert that the returned date is equal to the expected date.

3.2. Getting the End of a Year

Similarly, here’s how to get the last day:

@Test
void givenCalendarSetToFirstDayOfYear_whenFormattingDateToISO8601_thenFormattedDateMatchesLastDay() {
    Calendar cal = Calendar.getInstance();
    cal.set(Calendar.YEAR, 2023);
    cal.set(Calendar.MONTH, 11);
    cal.set(Calendar.DAY_OF_MONTH, 31);
    Date lastDay = cal.getTime();
        
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
    String formattedDate = sdf.format(lastDay);
        
    assertEquals("2023-12-31", formattedDate);
}

In the code above, we set the year, month, and day for the last day of the year. Also, we format the date and assert that it’s equal to the expected date.

4. Conclusion

In this article, we learned how to get the start and end dates of a year using the modern Date Time API and the old Calendar and Date classes. The Date Time API provides a cleaner and more intuitive API compared to Calendar and Date.

As always, the complete source code for the examples is available over on GitHub.

Course – LS – All

Get started with Spring and Spring Boot, through the Learn Spring course:

>> CHECK OUT THE COURSE
res – REST with Spring (eBook) (everywhere)
2 Comments
Oldest
Newest
Inline Feedbacks
View all comments
Comments are open for 30 days after publishing a post. For any issues past this date, use the Contact form on the site.