diff --git a/core-java-modules/core-java-date-operations-3/src/main/java/com/baeldung/lastdaymonth/LastDayOfMonth.java b/core-java-modules/core-java-date-operations-3/src/main/java/com/baeldung/lastdaymonth/LastDayOfMonth.java new file mode 100644 index 0000000000..0dc8304309 --- /dev/null +++ b/core-java-modules/core-java-date-operations-3/src/main/java/com/baeldung/lastdaymonth/LastDayOfMonth.java @@ -0,0 +1,32 @@ +package com.baeldung.lastdaymonth; + +import java.time.LocalDate; +import java.time.YearMonth; +import java.time.temporal.TemporalAdjusters; +import java.util.Calendar; + +public class LastDayOfMonth { + + static int getLastDayOfMonthUsingCalendar(int month) { + Calendar cal = Calendar.getInstance(); + cal.set(Calendar.MONTH, month); + return cal.getActualMaximum(Calendar.DAY_OF_MONTH); + } + + static int getLastDayOfMonthUsingTemporalAdjusters(LocalDate date) { + return date.with(TemporalAdjusters.lastDayOfMonth()) + .getDayOfMonth(); + } + + static int getLastDayOfMonthUsingYearMonth(YearMonth date) { + return date.atEndOfMonth() + .getDayOfMonth(); + } + + static int getLastDayOfMonthUsingJodaTime(org.joda.time.LocalDate date) { + return date.dayOfMonth() + .withMaximumValue() + .getDayOfMonth(); + } + +} diff --git a/core-java-modules/core-java-date-operations-3/src/test/java/com/baeldung/lastdaymonth/LastDayOfMonthUnitTest.java b/core-java-modules/core-java-date-operations-3/src/test/java/com/baeldung/lastdaymonth/LastDayOfMonthUnitTest.java new file mode 100644 index 0000000000..ea9a02c484 --- /dev/null +++ b/core-java-modules/core-java-date-operations-3/src/test/java/com/baeldung/lastdaymonth/LastDayOfMonthUnitTest.java @@ -0,0 +1,40 @@ +package com.baeldung.lastdaymonth; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +import java.time.LocalDate; +import java.time.YearMonth; + +import org.junit.jupiter.api.Test; + +class LastDayOfMonthUnitTest { + + @Test + void givenMonth_whenUsingCalendar_thenReturnLastDay() { + assertEquals(31, LastDayOfMonth.getLastDayOfMonthUsingCalendar(0)); + assertEquals(30, LastDayOfMonth.getLastDayOfMonthUsingCalendar(3)); + assertEquals(31, LastDayOfMonth.getLastDayOfMonthUsingCalendar(9)); + } + + @Test + void givenMonth_whenUsingTemporalAdjusters_thenReturnLastDay() { + assertEquals(31, LastDayOfMonth.getLastDayOfMonthUsingTemporalAdjusters(LocalDate.of(2023, 1, 1))); + assertEquals(30, LastDayOfMonth.getLastDayOfMonthUsingTemporalAdjusters(LocalDate.of(2023, 4, 1))); + assertEquals(31, LastDayOfMonth.getLastDayOfMonthUsingTemporalAdjusters(LocalDate.of(2023, 10, 1))); + } + + @Test + void givenMonth_whenUsingYearMonth_thenReturnLastDay() { + assertEquals(31, LastDayOfMonth.getLastDayOfMonthUsingYearMonth(YearMonth.of(2023, 1))); + assertEquals(30, LastDayOfMonth.getLastDayOfMonthUsingYearMonth(YearMonth.of(2023, 4))); + assertEquals(31, LastDayOfMonth.getLastDayOfMonthUsingYearMonth(YearMonth.of(2023, 10))); + } + + @Test + void givenMonth_whenUsingJodaTime_thenReturnLastDay() { + assertEquals(31, LastDayOfMonth.getLastDayOfMonthUsingJodaTime(org.joda.time.LocalDate.parse("2023-1-1"))); + assertEquals(30, LastDayOfMonth.getLastDayOfMonthUsingJodaTime(org.joda.time.LocalDate.parse("2023-4-1"))); + assertEquals(31, LastDayOfMonth.getLastDayOfMonthUsingJodaTime(org.joda.time.LocalDate.parse("2023-10-1"))); + } + +}