javax.time.calendar
Class MonthDay

java.lang.Object
  extended by javax.time.calendar.MonthDay
All Implemented Interfaces:
java.io.Serializable, java.lang.Comparable<MonthDay>, Calendrical, CalendricalMatcher, DateAdjuster

public final class MonthDay
extends java.lang.Object
implements Calendrical, CalendricalMatcher, DateAdjuster, java.lang.Comparable<MonthDay>, java.io.Serializable

A month-day in the ISO-8601 calendar system, such as --12-03.

MonthDay is an immutable calendrical that represents the combination of a year and month. Any field that can be derived from a month and day, such as quarter-of-year, can be obtained.

This class does not store or represent a year, time or time-zone. For example, the value "3rd December" can be stored in a MonthDay.

Since a MonthDay does not possess a year, the leap day of 29th of February is considered valid.

The ISO-8601 calendar system is the modern civil calendar system used today in most of the world. It is equivalent to the proleptic Gregorian calendar system, in which todays's rules for leap years are applied for all time. For most applications written today, the ISO-8601 rules are entirely suitable. Any application that uses historical dates should consider using HistoricDate.

MonthDay is immutable and thread-safe.

Author:
Michael Nascimento Santos, Stephen Colebourne
See Also:
Serialized Form

Method Summary
 LocalDate adjustDate(LocalDate date)
          Adjusts a date to have the value of this month-day, returning a new date.
 LocalDate adjustDate(LocalDate date, DateResolver resolver)
          Adjusts a date to have the value of this month-day, using a resolver to handle the case when the day-of-month becomes invalid.
 LocalDate atYear(int year)
          Returns a date formed from this month-day at the specified year.
 int compareTo(MonthDay other)
          Compares this month-day to another month-day.
 boolean equals(java.lang.Object obj)
          Checks if this month-day is equal to another month-day.
static MonthDay from(Calendrical... calendricals)
          Obtains an instance of MonthDay from a set of calendricals.
<T> T
get(CalendricalRule<T> ruleToDerive)
          Gets the value of the specified calendrical rule.
 int getDayOfMonth()
          Gets the day-of-month field.
 MonthOfYear getMonthOfYear()
          Gets the month-of-year field, which is an enum MonthOfYear.
 int hashCode()
          A hash code for this month-day.
 boolean isAfter(MonthDay other)
          Is this month-day after the specified month-day.
 boolean isBefore(MonthDay other)
          Is this month-day before the specified month-day.
 boolean isValidYear(int year)
          Checks if the year is valid for this month-day.
 boolean matchesCalendrical(Calendrical calendrical)
          Checks if the month-day extracted from the calendrical matches this.
static MonthDay now()
          Obtains the current month-day from the system clock in the default time-zone.
static MonthDay now(Clock clock)
          Obtains the current month-day from the specified clock.
static MonthDay of(int monthOfYear, int dayOfMonth)
          Obtains an instance of MonthDay.
static MonthDay of(MonthOfYear monthOfYear, int dayOfMonth)
          Obtains an instance of MonthDay.
static MonthDay parse(java.lang.CharSequence text)
          Obtains an instance of MonthDay from a text string such as --12-03.
static MonthDay parse(java.lang.CharSequence text, DateTimeFormatter formatter)
          Obtains an instance of MonthDay from a text string using a specific formatter.
 MonthDay rollDayOfMonth(int days)
          Rolls the day-of-month, adding the specified number of days to a copy of this MonthDay.
 MonthDay rollMonthOfYear(int months)
          Rolls the month-of-year, adding the specified number of months to a copy of this MonthDay.
static CalendricalRule<MonthDay> rule()
          Gets the rule for MonthDay.
 DateTimeFields toFields()
          Converts this month-day to an equivalent fields object.
 java.lang.String toString()
          Outputs this month-day as a String, such as --12-03.
 java.lang.String toString(DateTimeFormatter formatter)
          Outputs this month-day as a String using the formatter.
 MonthDay with(MonthOfYear monthOfYear)
          Returns a copy of this MonthDay with the month-of-year altered.
 MonthDay withDayOfMonth(int dayOfMonth)
          Returns a copy of this MonthDay with the day-of-month altered.
 MonthDay withMonthOfYear(int monthOfYear)
          Returns a copy of this MonthDay with the month-of-year altered.
 
Methods inherited from class java.lang.Object
clone, finalize, getClass, notify, notifyAll, wait, wait, wait
 

Method Detail

rule

public static CalendricalRule<MonthDay> rule()
Gets the rule for MonthDay.

Returns:
the rule for the month-day, not null

now

public static MonthDay now()
Obtains the current month-day from the system clock in the default time-zone.

This will query the system clock in the default time-zone to obtain the current month-day.

Using this method will prevent the ability to use an alternate clock for testing because the clock is hard-coded.

Returns:
the current month-day using the system clock, not null

now

public static MonthDay now(Clock clock)
Obtains the current month-day from the specified clock.

This will query the specified clock to obtain the current month-day. Using this method allows the use of an alternate clock for testing. The alternate clock may be introduced using dependency injection.

Parameters:
clock - the clock to use, not null
Returns:
the current month-day, not null

of

public static MonthDay of(MonthOfYear monthOfYear,
                          int dayOfMonth)
Obtains an instance of MonthDay.

The day-of-month must be valid for the month within a leap year. Hence, for February, day 29 is valid.

For example, passing in April and day 31 will throw an exception, as there can never be a 31st April in any year. Alternately, passing in 29th February is valid, as that month-day can be valid.

Parameters:
monthOfYear - the month-of-year to represent, not null
dayOfMonth - the day-of-month to represent, from 1 to 31
Returns:
the month-day, not null
Throws:
IllegalCalendarFieldValueException - if the value of any field is out of range
InvalidCalendarFieldException - if the day-of-month is invalid for the month

of

public static MonthDay of(int monthOfYear,
                          int dayOfMonth)
Obtains an instance of MonthDay.

The day-of-month must be valid for the month within a leap year. Hence, for month 2 (February), day 29 is valid.

For example, passing in month 4 (April) and day 31 will throw an exception, as there can never be a 31st April in any year. Alternately, passing in 29th February is valid, as that month-day can be valid.

Parameters:
monthOfYear - the month-of-year to represent, from 1 (January) to 12 (December)
dayOfMonth - the day-of-month to represent, from 1 to 31
Returns:
the month-day, not null
Throws:
IllegalCalendarFieldValueException - if the value of any field is out of range
InvalidCalendarFieldException - if the day-of-month is invalid for the month

from

public static MonthDay from(Calendrical... calendricals)
Obtains an instance of MonthDay from a set of calendricals.

A calendrical represents some form of date and time information. This method combines the input calendricals into a month-day.

Parameters:
calendricals - the calendricals to create a month-day from, no nulls, not null
Returns:
the month-day, not null
Throws:
CalendricalException - if unable to merge to a month-day

parse

public static MonthDay parse(java.lang.CharSequence text)
Obtains an instance of MonthDay from a text string such as --12-03.

The string must represent a valid month-day. The format is --MM-dd.

Parameters:
text - the text to parse such as "--12-03", not null
Returns:
the parsed month-day, not null
Throws:
CalendricalParseException - if the text cannot be parsed

parse

public static MonthDay parse(java.lang.CharSequence text,
                             DateTimeFormatter formatter)
Obtains an instance of MonthDay from a text string using a specific formatter.

The text is parsed using the formatter, returning a month-day.

Parameters:
text - the text to parse, not null
formatter - the formatter to use, not null
Returns:
the parsed month-day, not null
Throws:
java.lang.UnsupportedOperationException - if the formatter cannot parse
CalendricalParseException - if the text cannot be parsed

get

public <T> T get(CalendricalRule<T> ruleToDerive)
Gets the value of the specified calendrical rule.

This method queries the value of the specified calendrical rule. If the value cannot be returned for the rule from this month-day then null will be returned.

Specified by:
get in interface Calendrical
Parameters:
ruleToDerive - the rule to derive, not null
Returns:
the value for the rule, null if the value cannot be returned

getMonthOfYear

public MonthOfYear getMonthOfYear()
Gets the month-of-year field, which is an enum MonthOfYear.

This method returns the enum MonthOfYear for the month. This avoids confusion as to what int values mean. If you need access to the primitive int value then the enum provides the int value.

Additional information can be obtained from the MonthOfYear. This includes month lengths, textual names and access to the quarter-of-year and month-of-quarter values.

Returns:
the month-of-year, not null

getDayOfMonth

public int getDayOfMonth()
Gets the day-of-month field.

This method returns the primitive int value for the day-of-month.

Returns:
the day-of-month, from 1 to 31

with

public MonthDay with(MonthOfYear monthOfYear)
Returns a copy of this MonthDay with the month-of-year altered.

If the day-of-month is invalid for the specified month, the day will be adjusted to the last valid day-of-month.

This instance is immutable and unaffected by this method call.

Parameters:
monthOfYear - the month-of-year to set in the returned month-day, not null
Returns:
a MonthDay based on this month-day with the requested month, not null

withMonthOfYear

public MonthDay withMonthOfYear(int monthOfYear)
Returns a copy of this MonthDay with the month-of-year altered.

If the day-of-month is invalid for the specified month, the day will be adjusted to the last valid day-of-month.

This instance is immutable and unaffected by this method call.

Parameters:
monthOfYear - the month-of-year to set in the returned month-day, from 1 (January) to 12 (December)
Returns:
a MonthDay based on this month-day with the requested month, not null
Throws:
IllegalCalendarFieldValueException - if the month-of-year value is invalid

withDayOfMonth

public MonthDay withDayOfMonth(int dayOfMonth)
Returns a copy of this MonthDay with the day-of-month altered.

If the day-of-month is invalid for the current month, an exception will be thrown.

This instance is immutable and unaffected by this method call.

Parameters:
dayOfMonth - the day-of-month to set in the return month-day, from 1 to 31
Returns:
a MonthDay based on this month-day with the requested day, not null
Throws:
IllegalCalendarFieldValueException - if the day-of-month value is invalid
InvalidCalendarFieldException - if the day-of-month is invalid for the month

rollMonthOfYear

public MonthDay rollMonthOfYear(int months)
Rolls the month-of-year, adding the specified number of months to a copy of this MonthDay.

This method will add the specified number of months to the month-day, rolling from December back to January if necessary.

If the day-of-month is invalid for the specified month in the result, the day will be adjusted to the last valid day-of-month.

This instance is immutable and unaffected by this method call.

Parameters:
months - the months to roll by, positive or negative
Returns:
a MonthDay based on this month-day with the month rolled, not null

rollDayOfMonth

public MonthDay rollDayOfMonth(int days)
Rolls the day-of-month, adding the specified number of days to a copy of this MonthDay.

This method will add the specified number of days to the month-day, rolling from last day-of-month to the first if necessary.

This instance is immutable and unaffected by this method call.

Parameters:
days - the days to roll by, positive or negative
Returns:
a MonthDay based on this month-day with the day rolled, not null

matchesCalendrical

public boolean matchesCalendrical(Calendrical calendrical)
Checks if the month-day extracted from the calendrical matches this.

This method implements the CalendricalMatcher interface. It is intended that applications use LocalDate.matches(javax.time.calendar.CalendricalMatcher) rather than this method.

Specified by:
matchesCalendrical in interface CalendricalMatcher
Parameters:
calendrical - the calendrical to match, not null
Returns:
true if the calendrical matches, false otherwise

adjustDate

public LocalDate adjustDate(LocalDate date)
Adjusts a date to have the value of this month-day, returning a new date.

This method implements the DateAdjuster interface. It is intended that, instead of calling this method directly, it is used from an instance of LocalDate:

   date = date.with(monthDay);
 

This implementation handles the case where this represents February 29 and the year is not a leap year by throwing an exception.

This instance is immutable and unaffected by this method call.

Specified by:
adjustDate in interface DateAdjuster
Parameters:
date - the date to be adjusted, not null
Returns:
the adjusted date, not null
Throws:
InvalidCalendarFieldException - if the day-of-month is invalid for the year

adjustDate

public LocalDate adjustDate(LocalDate date,
                            DateResolver resolver)
Adjusts a date to have the value of this month-day, using a resolver to handle the case when the day-of-month becomes invalid.

This instance is immutable and unaffected by this method call.

Parameters:
date - the date to be adjusted, not null
resolver - the date resolver to use if the day-of-month is invalid, not null
Returns:
the adjusted date, not null
Throws:
InvalidCalendarFieldException - if the day-of-month is invalid for the year

isValidYear

public boolean isValidYear(int year)
Checks if the year is valid for this month-day.

This method checks whether this month and day and the input year form a valid date.

Parameters:
year - the year to validate, an out of range value returns false
Returns:
true if the year is valid for this month-day
See Also:
Year.isValidMonthDay(MonthDay)

atYear

public LocalDate atYear(int year)
Returns a date formed from this month-day at the specified year.

This method merges this and the specified year to form an instance of LocalDate.

 LocalDate date = monthDay.atYear(year);
 

This instance is immutable and unaffected by this method call.

Parameters:
year - the year to use, from MIN_YEAR to MAX_YEAR
Returns:
the local date formed from this month-day and the specified year, not null
See Also:
Year.atMonthDay(MonthDay)

toFields

public DateTimeFields toFields()
Converts this month-day to an equivalent fields object.

The fields will contain ISODateTimeRule.MONTH_OF_YEAR and ISODateTimeRule.DAY_OF_MONTH.

Returns:
the equivalent fields, not null

compareTo

public int compareTo(MonthDay other)
Compares this month-day to another month-day.

Specified by:
compareTo in interface java.lang.Comparable<MonthDay>
Parameters:
other - the other month-day to compare to, not null
Returns:
the comparator value, negative if less, positive if greater
Throws:
java.lang.NullPointerException - if other is null

isAfter

public boolean isAfter(MonthDay other)
Is this month-day after the specified month-day.

Parameters:
other - the other month-day to compare to, not null
Returns:
true if this is after the specified month-day
Throws:
java.lang.NullPointerException - if other is null

isBefore

public boolean isBefore(MonthDay other)
Is this month-day before the specified month-day.

Parameters:
other - the other month-day to compare to, not null
Returns:
true if this point is before the specified month-day
Throws:
java.lang.NullPointerException - if other is null

equals

public boolean equals(java.lang.Object obj)
Checks if this month-day is equal to another month-day.

The comparison is based on the time-line position of the month-day within a year.

Overrides:
equals in class java.lang.Object
Parameters:
obj - the object to check, null returns false
Returns:
true if this is equal to the other month-day

hashCode

public int hashCode()
A hash code for this month-day.

Overrides:
hashCode in class java.lang.Object
Returns:
a suitable hash code

toString

public java.lang.String toString()
Outputs this month-day as a String, such as --12-03.

The output will be in the format --MM-dd:

Overrides:
toString in class java.lang.Object
Returns:
a string representation of this month-day, not null

toString

public java.lang.String toString(DateTimeFormatter formatter)
Outputs this month-day as a String using the formatter.

Parameters:
formatter - the formatter to use, not null
Returns:
the formatted month-day string, not null
Throws:
java.lang.UnsupportedOperationException - if the formatter cannot print
CalendricalException - if an error occurs during printing