Previous in the Series
Current Tutorial
Date
Next in the Series

Previous in the Series: DayOfWeek and Month Enums

Next in the Series: Date and Time

Date

The Date-Time API provides four classes that deal exclusively with date information, without respect to time or time zone. The use of these classes are suggested by the class names: LocalDate, YearMonth, MonthDay, and Year.

 

The LocalDate Class

A LocalDate represents a year-month-day in the ISO calendar and is useful for representing a date without a time. You might use a LocalDate to track a significant event, such as a birth date or wedding date. The following examples use the of and with methods to create instances of LocalDate:

LocalDate date = LocalDate.of(2000, Month.NOVEMBER, 20);
LocalDate nextWed = date.with(TemporalAdjusters.next(DayOfWeek.WEDNESDAY));

For more information about the TemporalAdjuster interface, see the section on Temporal Adjuster.

In addition to the usual methods, the LocalDate class offers getter methods for obtaining information about a given date. The getDayOfWeek() method returns the day of the week that a particular date falls on. For example, the following line of code returns "MONDAY":

DayOfWeek dotw = LocalDate.of(2012, Month.JULY, 9).getDayOfWeek();

The following example uses a TemporalAdjuster to retrieve the first Wednesday after a specific date.

LocalDate date = LocalDate.of(2000, Month.NOVEMBER, 20);
TemporalAdjuster adj = TemporalAdjusters.next(DayOfWeek.WEDNESDAY);
LocalDate nextWed = date.with(adj);
System.out.printf("For the date of %s, the next Wednesday is %s.%n",
                  date, nextWed);

Running the code produces the following:

For the date of 2000-11-20, the next Wednesday is 2000-11-22.

The Period and Duration section also has examples using the LocalDate class.

 

The YearMonth Class

The YearMonth class represents the month of a specific year. The following example uses the lengthOfMonth() method to determine the number of days for several year and month combinations.

YearMonth date = YearMonth.now();
System.out.printf("%s: %d%n", date, date.lengthOfMonth());

YearMonth date2 = YearMonth.of(2010, Month.FEBRUARY);
System.out.printf("%s: %d%n", date2, date2.lengthOfMonth());

YearMonth date3 = YearMonth.of(2012, Month.FEBRUARY);
System.out.printf("%s: %d%n", date3, date3.lengthOfMonth());

The output from this code looks like the following:

2013-06: 30
2010-02: 28
2012-02: 29

 

The MonthDay Class

The MonthDay class represents the day of a particular month, such as New Year's Day on January 1.

The following example uses the isValidYear() method to determine if February 29 is valid for the year 2010. The call returns false, confirming that 2010 is not a leap year.

MonthDay date = MonthDay.of(Month.FEBRUARY, 29);
boolean validLeapYear = date.isValidYear(2010);

 

The Year Class

The Year class represents a year. The following example uses the isLeap() method to determine if the given year is a leap year. The call returns true, confirming that 2012 is a leap year.

boolean validLeapYear = Year.of(2012).isLeap();

Last update: January 27, 2022


Previous in the Series
Current Tutorial
Date
Next in the Series

Previous in the Series: DayOfWeek and Month Enums

Next in the Series: Date and Time