Java 8 – How to Get the First and Last Day of the Month

Introduction

With the introduction of the java.time package in Java 8, handling date and time operations has become more straightforward and powerful. One common requirement is determining the first and last day of a given month. This can be useful for tasks such as generating monthly reports, scheduling events, or calculating date ranges.

In this guide, we’ll explore how to get the first and last day of the month using Java 8’s java.time package.

Table of Contents

  • Problem Statement
  • Solution Steps
  • Java Program
    • Get the First Day of the Month
    • Get the Last Day of the Month
  • Advanced Considerations
  • Conclusion

Problem Statement

The task is to create a Java program that:

  • Retrieves the first and last day of the current month or any specified month.

Example:

  • Input: A LocalDate object representing any date in a month, such as 2024-08-15.
  • Output:
    • The first day of the month: 2024-08-01.
    • The last day of the month: 2024-08-31.

Solution Steps

  1. Create a LocalDate Object: Represent a specific date within the month you are interested in.
  2. Get the First Day of the Month: Use the withDayOfMonth(1) method to get the first day.
  3. Get the Last Day of the Month: Use the withDayOfMonth(date.lengthOfMonth()) method to get the last day.

Java Program

Get the First and Last Day of the Month

The following example demonstrates how to get the first and last day of the month using Java 8.

import java.time.LocalDate;

/**
 * Java 8 - Get the First and Last Day of the Month
 * Author: https://www.rameshfadatare.com/
 */
public class FirstAndLastDayOfMonth {

    public static void main(String[] args) {
        // Step 1: Create a LocalDate object (example: any date in August 2024)
        LocalDate date = LocalDate.of(2024, 8, 15);

        // Step 2: Get the first day of the month
        LocalDate firstDayOfMonth = date.withDayOfMonth(1);

        // Step 3: Get the last day of the month
        LocalDate lastDayOfMonth = date.withDayOfMonth(date.lengthOfMonth());

        // Step 4: Display the results
        System.out.println("First day of the month: " + firstDayOfMonth);
        System.out.println("Last day of the month: " + lastDayOfMonth);
    }
}

Output

First day of the month: 2024-08-01
Last day of the month: 2024-08-31

Explanation

  • Date Creation: LocalDate.of(2024, 8, 15) creates a LocalDate instance representing August 15, 2024.
  • First Day of the Month: date.withDayOfMonth(1) sets the day of the month to the first day, resulting in 2024-08-01.
  • Last Day of the Month: date.withDayOfMonth(date.lengthOfMonth()) sets the day of the month to the last day, which is calculated using lengthOfMonth(). This accounts for varying month lengths, such as February in leap years.

Advanced Considerations

  • Handling Different Months: The lengthOfMonth() method automatically adjusts for months with varying lengths, including leap years, ensuring accurate results across all months.

  • Time Zones: If you are working with ZonedDateTime or OffsetDateTime, you can similarly get the first and last days of the month by first converting to LocalDate and then applying the same logic.

  • Immutable Objects: LocalDate is immutable, meaning each modification creates a new instance, ensuring thread safety and preventing unintended side effects.

Conclusion

This guide demonstrates how to get the first and last day of the month using Java 8’s java.time package. By leveraging the LocalDate class and its methods, you can easily determine the first and last days of any month, accommodating different month lengths and leap years. This is particularly useful for applications that require date calculations, such as financial reports, scheduling, or generating monthly summaries.

Leave a Comment

Your email address will not be published. Required fields are marked *

Scroll to Top