javax.time.calendar
Class OffsetDate

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

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

A date with a zone offset from UTC in the ISO-8601 calendar system, such as 2007-12-03+01:00.

OffsetDate is an immutable calendrical that represents a date, often viewed as year-month-day-offset. This object can also access other date fields such as day-of-year, day-of-week and week-of-year.

This class does not store or represent a time. For example, the value "2nd October 2007 +02:00" can be stored in a OffsetDate.

OffsetDate is immutable and thread-safe.

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

Method Summary
 OffsetDateTime atMidnight()
          Returns an offset date-time formed from this date at the time of midnight.
 ZonedDateTime atStartOfDayInZone(ZoneId zone)
          Returns a zoned date-time from this date at the earliest valid time according to the rules in the time-zone ignoring the current offset.
 OffsetDateTime atTime(int hourOfDay, int minuteOfHour)
          Returns an offset date-time formed from this date at the specified time.
 OffsetDateTime atTime(int hourOfDay, int minuteOfHour, int secondOfMinute)
          Returns an offset date-time formed from this date at the specified time.
 OffsetDateTime atTime(int hourOfDay, int minuteOfHour, int secondOfMinute, int nanoOfSecond)
          Returns an offset date-time formed from this date at the specified time.
 OffsetDateTime atTime(LocalTime time)
          Returns an offset date-time formed from this date at the specified time.
 OffsetDateTime atTime(OffsetTime time)
          Returns an offset date-time formed from this date at the specified time.
 int compareTo(OffsetDate other)
          Compares this OffsetDate to another date based on the UTC equivalent dates then local date.
 boolean equalInstant(OffsetDate other)
          Checks if the instant of midnight at the start of this OffsetDate equals midnight at the start of the specified date.
 boolean equals(java.lang.Object obj)
          Checks if this date is equal to another date.
static OffsetDate from(Calendrical... calendricals)
          Obtains an instance of OffsetDate 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.
 DayOfWeek getDayOfWeek()
          Gets the day-of-week field, which is an enum DayOfWeek.
 int getDayOfYear()
          Gets the day-of-year field.
 MonthOfYear getMonthOfYear()
          Gets the month-of-year field, which is an enum MonthOfYear.
 ZoneOffset getOffset()
          Gets the zone offset.
 int getYear()
          Gets the year field.
 int hashCode()
          A hash code for this date.
 boolean isAfter(OffsetDate other)
          Checks if the instant of midnight at the start of this OffsetDate is after midnight at the start of the specified date.
 boolean isBefore(OffsetDate other)
          Checks if the instant of midnight at the start of this OffsetDate is before midnight at the start of the specified date.
 boolean isLeapYear()
          Checks if the year is a leap year, according to the ISO proleptic calendar system rules.
 boolean matches(CalendricalMatcher matcher)
          Checks whether this OffsetDate matches the specified matcher.
 boolean matchesCalendrical(Calendrical calendrical)
          Checks if the date extracted from the calendrical matches this date.
 OffsetDate minus(PeriodProvider periodProvider)
          Returns a copy of this OffsetDate with the specified date period subtracted.
 OffsetDate minusDays(long days)
          Returns a copy of this OffsetDate with the specified number of days subtracted.
 OffsetDate minusMonths(long months)
          Returns a copy of this OffsetDate with the specified period in months subtracted.
 OffsetDate minusMonths(long months, DateResolver dateResolver)
          Returns a copy of this OffsetDate with the specified period in months subtracted.
 OffsetDate minusWeeks(long weeks)
          Returns a copy of this OffsetDate with the specified period in weeks subtracted.
 OffsetDate minusYears(long years)
          Returns a copy of this OffsetDate with the specified period in years subtracted.
 OffsetDate minusYears(long years, DateResolver dateResolver)
          Returns a copy of this OffsetDate with the specified period in years subtracted.
static OffsetDate now()
          Obtains the current date from the system clock in the default time-zone.
static OffsetDate now(Clock clock)
          Obtains the current date from the specified clock.
static OffsetDate of(int year, int monthOfYear, int dayOfMonth, ZoneOffset offset)
          Obtains an instance of OffsetDate from a year, month and day.
static OffsetDate of(int year, MonthOfYear monthOfYear, int dayOfMonth, ZoneOffset offset)
          Obtains an instance of OffsetDate from a year, month and day.
static OffsetDate of(LocalDate date, ZoneOffset offset)
          Obtains an instance of OffsetDate from a local date and an offset.
static OffsetDate ofInstant(InstantProvider instantProvider, ZoneOffset offset)
          Obtains an instance of OffsetDate from an InstantProvider.
static OffsetDate ofInstantUTC(InstantProvider instantProvider)
          Obtains an instance of OffsetDate from an InstantProvider using the UTC offset.
static OffsetDate parse(java.lang.CharSequence text)
          Obtains an instance of OffsetDate from a text string such as 2007-12-03+01:00.
static OffsetDate parse(java.lang.CharSequence text, DateTimeFormatter formatter)
          Obtains an instance of OffsetDate from a text string using a specific formatter.
 OffsetDate plus(PeriodProvider periodProvider)
          Returns a copy of this OffsetDate with the specified date period added.
 OffsetDate plusDays(long days)
          Returns a copy of this OffsetDate with the specified period in days added.
 OffsetDate plusMonths(long months)
          Returns a copy of this OffsetDate with the specified period in months added.
 OffsetDate plusMonths(long months, DateResolver dateResolver)
          Returns a copy of this OffsetDate with the specified period in months added.
 OffsetDate plusWeeks(long weeks)
          Returns a copy of this OffsetDate with the specified period in weeks added.
 OffsetDate plusYears(long years)
          Returns a copy of this OffsetDate with the specified period in years added.
 OffsetDate plusYears(long years, DateResolver dateResolver)
          Returns a copy of this OffsetDate with the specified period in years added.
static CalendricalRule<OffsetDate> rule()
          Gets the rule for OffsetDate.
 Instant toInstant()
          Converts this date to an Instant at midnight.
 LocalDate toLocalDate()
          Converts this date to a LocalDate.
 java.lang.String toString()
          Outputs this date as a String, such as 2007-12-03+01:00.
 java.lang.String toString(DateTimeFormatter formatter)
          Outputs this date as a String using the formatter.
 OffsetDate with(DateAdjuster adjuster)
          Returns a copy of this OffsetDate with the date altered using the adjuster.
 OffsetDate with(MonthOfYear monthOfYear)
          Returns a copy of this OffsetDate with the month-of-year altered.
 OffsetDate with(MonthOfYear monthOfYear, DateResolver dateResolver)
          Returns a copy of this OffsetDate with the month-of-year altered.
 OffsetDate withDayOfMonth(int dayOfMonth)
          Returns a copy of this OffsetDate with the day-of-month altered.
 OffsetDate withDayOfMonth(int dayOfMonth, DateResolver dateResolver)
          Returns a copy of this OffsetDate with the day-of-month altered.
 OffsetDate withDayOfYear(int dayOfYear)
          Returns a copy of this OffsetDate with the day-of-year altered.
 OffsetDate withMonthOfYear(int monthOfYear)
          Returns a copy of this OffsetDate with the month-of-year altered.
 OffsetDate withMonthOfYear(int monthOfYear, DateResolver dateResolver)
          Returns a copy of this OffsetDate with the month-of-year altered.
 OffsetDate withOffset(ZoneOffset offset)
          Returns a copy of this OffsetDate with the specified offset.
 OffsetDate withYear(int year)
          Returns a copy of this OffsetDate with the year altered.
 OffsetDate withYear(int year, DateResolver dateResolver)
          Returns a copy of this OffsetDate with the year altered.
 
Methods inherited from class java.lang.Object
clone, finalize, getClass, notify, notifyAll, wait, wait, wait
 

Method Detail

rule

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

Returns:
the rule for the date, not null

now

public static OffsetDate now()
Obtains the current date from the system clock in the default time-zone.

This will query the system clock in the default time-zone to obtain the current date. The offset will be calculated from the time-zone in the clock.

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

Returns:
the current date using the system clock, not null

now

public static OffsetDate now(Clock clock)
Obtains the current date from the specified clock.

This will query the specified clock to obtain the current date - today. The offset will be calculated from the time-zone in the clock.

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 date, not null

of

public static OffsetDate of(int year,
                            MonthOfYear monthOfYear,
                            int dayOfMonth,
                            ZoneOffset offset)
Obtains an instance of OffsetDate from a year, month and day.

Parameters:
year - the year to represent, from MIN_YEAR to MAX_YEAR
monthOfYear - the month-of-year to represent, not null
dayOfMonth - the day-of-month to represent, from 1 to 31
offset - the zone offset, not null
Returns:
the offset date, 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-year

of

public static OffsetDate of(int year,
                            int monthOfYear,
                            int dayOfMonth,
                            ZoneOffset offset)
Obtains an instance of OffsetDate from a year, month and day.

Parameters:
year - the year to represent, from MIN_YEAR to MAX_YEAR
monthOfYear - the month-of-year to represent, from 1 (January) to 12 (December)
dayOfMonth - the day-of-month to represent, from 1 to 31
offset - the zone offset, not null
Returns:
the offset date, 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-year

of

public static OffsetDate of(LocalDate date,
                            ZoneOffset offset)
Obtains an instance of OffsetDate from a local date and an offset.

Parameters:
date - the local date, not null
offset - the zone offset, not null
Returns:
the offset date, not null

ofInstantUTC

public static OffsetDate ofInstantUTC(InstantProvider instantProvider)
Obtains an instance of OffsetDate from an InstantProvider using the UTC offset.

This conversion drops the time component of the instant effectively converting at midnight at the start of the UTC day.

Parameters:
instantProvider - the instant to convert, not null
Returns:
the offset date in UTC, not null
Throws:
CalendricalException - if the instant exceeds the supported date range

ofInstant

public static OffsetDate ofInstant(InstantProvider instantProvider,
                                   ZoneOffset offset)
Obtains an instance of OffsetDate from an InstantProvider.

This conversion drops the time component of the instant effectively converting at midnight at the start of the day.

Parameters:
instantProvider - the instant to convert, not null
offset - the zone offset, not null
Returns:
the offset date, not null
Throws:
CalendricalException - if the instant exceeds the supported date range

from

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

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

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

parse

public static OffsetDate parse(java.lang.CharSequence text)
Obtains an instance of OffsetDate from a text string such as 2007-12-03+01:00.

The string must represent a valid date and is parsed using DateTimeFormatters.isoOffsetDate(). Year, month, day-of-month and offset are required. Years outside the range 0000 to 9999 must be prefixed by the plus or minus symbol.

Parameters:
text - the text to parse such as "2007-12-03+01:00", not null
Returns:
the parsed offset date, not null
Throws:
CalendricalParseException - if the text cannot be parsed

parse

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

The text is parsed using the formatter, returning a date.

Parameters:
text - the text to parse, not null
formatter - the formatter to use, not null
Returns:
the parsed offset date, 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 date 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

getOffset

public ZoneOffset getOffset()
Gets the zone offset.

Returns:
the zone offset, not null

withOffset

public OffsetDate withOffset(ZoneOffset offset)
Returns a copy of this OffsetDate with the specified offset.

This method returns an object with the same LocalDate and the specified ZoneOffset. No calculation is needed or performed. For example, if this time represents 2007-12-03+02:00 and the offset specified is +03:00, then this method will return 2007-12-03+03:00.

This instance is immutable and unaffected by this method call.

Parameters:
offset - the zone offset to change to, not null
Returns:
an OffsetDate based on this date with the requested offset, not null

getYear

public int getYear()
Gets the year field.

This method returns the primitive int value for the year. Additional information about the year can be obtained by creating a Year.

Returns:
the year, from MIN_YEAR to MAX_YEAR

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

getDayOfYear

public int getDayOfYear()
Gets the day-of-year field.

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

Returns:
the day-of-year, from 1 to 365, or 366 in a leap year

getDayOfWeek

public DayOfWeek getDayOfWeek()
Gets the day-of-week field, which is an enum DayOfWeek.

This method returns the enum DayOfWeek for the day-of-week. 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 DayOfWeek. This includes textual names of the values.

Returns:
the day-of-week, not null

isLeapYear

public boolean isLeapYear()
Checks if the year is a leap year, according to the ISO proleptic calendar system rules.

This method applies the current rules for leap years across the whole time-line. In general, a year is a leap year if it is divisible by four without remainder. However, years divisible by 100, are not leap years, with the exception of years divisible by 400 which are.

For example, 1904 is a leap year it is divisible by 4. 1900 was not a leap year as it is divisible by 100, however 2000 was a leap year as it is divisible by 400.

The calculation is proleptic - applying the same rules into the far future and far past. This is historically inaccurate, but is correct for the ISO-8601 standard.

Returns:
true if the year is leap, false otherwise

with

public OffsetDate with(DateAdjuster adjuster)
Returns a copy of this OffsetDate with the date altered using the adjuster.

This adjusts the date according to the rules of the specified adjuster. The offset is not part of the calculation and will be unchanged in the result. Note that LocalDate implements DateAdjuster, thus this method can be used to change the entire date.

This instance is immutable and unaffected by this method call.

Parameters:
adjuster - the adjuster to use, not null
Returns:
an OffsetDate based on this date adjusted as necessary, not null

withYear

public OffsetDate withYear(int year)
Returns a copy of this OffsetDate with the year altered. If the resulting date is invalid, it will be resolved using DateResolvers.previousValid(). The offset does not affect the calculation and will be the same in the result.

This method does the same as withYear(year, DateResolvers.previousValid()).

This instance is immutable and unaffected by this method call.

Parameters:
year - the year to set in the returned date, from MIN_YEAR to MAX_YEAR
Returns:
an OffsetDate based on this date with the requested year, not null
Throws:
IllegalCalendarFieldValueException - if the year value is invalid

withYear

public OffsetDate withYear(int year,
                           DateResolver dateResolver)
Returns a copy of this OffsetDate with the year altered. If the resulting date is invalid, it will be resolved using dateResolver. The offset does not affect the calculation and will be the same in the result.

This instance is immutable and unaffected by this method call.

Parameters:
year - the year to set in the returned date, from MIN_YEAR to MAX_YEAR
dateResolver - the DateResolver to be used if the resulting date would be invalid
Returns:
an OffsetDate based on this date with the requested year, not null
Throws:
IllegalCalendarFieldValueException - if the year value is invalid

withMonthOfYear

public OffsetDate withMonthOfYear(int monthOfYear)
Returns a copy of this OffsetDate with the month-of-year altered. If the resulting date is invalid, it will be resolved using DateResolvers.previousValid(). The offset does not affect the calculation and will be the same in the result.

This method does the same as withMonthOfYear(monthOfYear, DateResolvers.previousValid()).

This instance is immutable and unaffected by this method call.

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

withMonthOfYear

public OffsetDate withMonthOfYear(int monthOfYear,
                                  DateResolver dateResolver)
Returns a copy of this OffsetDate with the month-of-year altered. If the resulting date is invalid, it will be resolved using dateResolver. The offset does not affect the calculation and will be the same in the result.

This instance is immutable and unaffected by this method call.

Parameters:
monthOfYear - the month-of-year to set in the returned date, from 1 (January) to 12 (December)
dateResolver - the DateResolver to be used if the resulting date would be invalid
Returns:
an OffsetDate based on this date with the requested month, not null
Throws:
IllegalCalendarFieldValueException - if the month-of-year value is invalid

with

public OffsetDate with(MonthOfYear monthOfYear)
Returns a copy of this OffsetDate with the month-of-year altered. If the resulting date is invalid, it will be resolved using DateResolvers.previousValid(). The offset does not affect the calculation and will be the same in the result.

This method does the same as with(monthOfYear, DateResolvers.previousValid()).

This instance is immutable and unaffected by this method call.

Parameters:
monthOfYear - the month-of-year to set in the returned date, not null
Returns:
an OffsetDate based on this date with the requested month, not null

with

public OffsetDate with(MonthOfYear monthOfYear,
                       DateResolver dateResolver)
Returns a copy of this OffsetDate with the month-of-year altered. If the resulting date is invalid, it will be resolved using dateResolver. The offset does not affect the calculation and will be the same in the result.

This instance is immutable and unaffected by this method call.

Parameters:
monthOfYear - the month-of-year to set in the returned date, not null
dateResolver - the DateResolver to be used if the resulting date would be invalid
Returns:
an OffsetDate based on this date with the requested month, not null

withDayOfMonth

public OffsetDate withDayOfMonth(int dayOfMonth)
Returns a copy of this OffsetDate with the day-of-month altered. If the resulting date is invalid, an exception is thrown. The offset does not affect the calculation and will be the same in the result.

This instance is immutable and unaffected by this method call.

Parameters:
dayOfMonth - the day-of-month to set in the returned date, from 1 to 28-31
Returns:
an OffsetDate based on this date 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-year

withDayOfMonth

public OffsetDate withDayOfMonth(int dayOfMonth,
                                 DateResolver dateResolver)
Returns a copy of this OffsetDate with the day-of-month altered. If the resulting date is invalid, it will be resolved using dateResolver. The offset does not affect the calculation and will be the same in the result.

This instance is immutable and unaffected by this method call.

Parameters:
dayOfMonth - the day-of-month to set in the returned date, from 1 to 31
dateResolver - the DateResolver to be used if the resulting date would be invalid
Returns:
an OffsetDate based on this date with the requested day, not null
Throws:
IllegalCalendarFieldValueException - if the day-of-month value is invalid

withDayOfYear

public OffsetDate withDayOfYear(int dayOfYear)
Returns a copy of this OffsetDate with the day-of-year altered. If the resulting date is invalid, an exception is thrown.

This instance is immutable and unaffected by this method call.

Parameters:
dayOfYear - the day-of-year to set in the returned date, from 1 to 365-366
Returns:
an OffsetDate based on this date with the requested day, not null
Throws:
IllegalCalendarFieldValueException - if the day-of-year value is invalid
InvalidCalendarFieldException - if the day-of-year is invalid for the year

plus

public OffsetDate plus(PeriodProvider periodProvider)
Returns a copy of this OffsetDate with the specified date period added.

This adds the specified period to this date, returning a new date. Before addition, the period is converted to a date-based Period using Period.ofDateFields(PeriodProvider). That factory ignores any time-based ISO fields, thus adding a time-based period to this date will have no effect. If you want to take time fields into account, call Period.normalizedWith24HourDays() on the input period.

The detailed rules for the addition have some complexity due to variable length months. See LocalDate.plus(PeriodProvider) for details.

This instance is immutable and unaffected by this method call.

Parameters:
periodProvider - the period to add, not null
Returns:
an OffsetDate based on this date with the period added, not null
Throws:
CalendricalException - if the specified period cannot be converted to a Period
CalendricalException - if the result exceeds the supported date range

plusYears

public OffsetDate plusYears(long years)
Returns a copy of this OffsetDate with the specified period in years added.

This method adds the specified amount to the years field in three steps:

  1. Add the input years to the year field
  2. Check if the resulting date would be invalid
  3. Adjust the day-of-month to the last valid day if necessary

For example, 2008-02-29 (leap year) plus one year would result in the invalid date 2009-02-29 (standard year). Instead of returning an invalid result, the last valid day of the month, 2009-02-28, is selected instead.

This method does the same as plusYears(years, DateResolvers.previousValid()).

This instance is immutable and unaffected by this method call.

Parameters:
years - the years to add, may be negative
Returns:
an OffsetDate based on this date with the years added, not null
Throws:
CalendricalException - if the result exceeds the supported date range
See Also:
plusYears(long, javax.time.calendar.DateResolver)

plusYears

public OffsetDate plusYears(long years,
                            DateResolver dateResolver)
Returns a copy of this OffsetDate with the specified period in years added.

This method adds the specified amount to the years field in three steps:

  1. Add the input years to the year field
  2. Check if the resulting date would be invalid
  3. Adjust the date using dateResolver if necessary

This instance is immutable and unaffected by this method call.

Parameters:
years - the years to add, may be negative
dateResolver - the DateResolver to be used if the resulting date would be invalid
Returns:
an OffsetDate based on this date with the years added, not null
Throws:
CalendricalException - if the result exceeds the supported date range

plusMonths

public OffsetDate plusMonths(long months)
Returns a copy of this OffsetDate with the specified period in months added.

This method adds the specified amount to the months field in three steps:

  1. Add the input months to the month-of-year field
  2. Check if the resulting date would be invalid
  3. Adjust the day-of-month to the last valid day if necessary

For example, 2007-03-31 plus one month would result in the invalid date 2007-04-31. Instead of returning an invalid result, the last valid day of the month, 2007-04-30, is selected instead.

This method does the same as plusMonths(months, DateResolvers.previousValid()).

This instance is immutable and unaffected by this method call.

Parameters:
months - the months to add, may be negative
Returns:
an OffsetDate based on this date with the months added, not null
Throws:
CalendricalException - if the result exceeds the supported date range
See Also:
plusMonths(long, javax.time.calendar.DateResolver)

plusMonths

public OffsetDate plusMonths(long months,
                             DateResolver dateResolver)
Returns a copy of this OffsetDate with the specified period in months added.

This method adds the specified amount to the months field in three steps:

  1. Add the input months to the month-of-year field
  2. Check if the resulting date would be invalid
  3. Adjust the date using dateResolver if necessary

This instance is immutable and unaffected by this method call.

Parameters:
months - the months to add, may be negative
dateResolver - the DateResolver to be used if the resulting date would be invalid
Returns:
an OffsetDate based on this date with the months added, not null
Throws:
CalendricalException - if the result exceeds the supported date range

plusWeeks

public OffsetDate plusWeeks(long weeks)
Returns a copy of this OffsetDate with the specified period in weeks added.

This method adds the specified amount in weeks to the days field incrementing the month and year fields as necessary to ensure the result remains valid. The result is only invalid if the maximum/minimum year is exceeded.

For example, 2008-12-31 plus one week would result in 2009-01-07.

This instance is immutable and unaffected by this method call.

Parameters:
weeks - the weeks to add, may be negative
Returns:
an OffsetDate based on this date with the weeks added, not null
Throws:
CalendricalException - if the result exceeds the supported date range

plusDays

public OffsetDate plusDays(long days)
Returns a copy of this OffsetDate with the specified period in days added.

This method adds the specified amount to the days field incrementing the month and year fields as necessary to ensure the result remains valid. The result is only invalid if the maximum/minimum year is exceeded.

For example, 2008-12-31 plus one day would result in 2009-01-01.

This instance is immutable and unaffected by this method call.

Parameters:
days - the days to add, may be negative
Returns:
an OffsetDate based on this date with the days added, not null
Throws:
CalendricalException - if the result exceeds the supported date range

minus

public OffsetDate minus(PeriodProvider periodProvider)
Returns a copy of this OffsetDate with the specified date period subtracted.

This subtracts the specified period from this date, returning a new date. Before subtraction, the period is converted to a date-based Period using Period.ofDateFields(PeriodProvider). That factory ignores any time-based ISO fields, thus subtracting a time-based period from this date will have no effect. If you want to take time fields into account, call Period.normalizedWith24HourDays() on the input period.

The detailed rules for the subtraction have some complexity due to variable length months. See LocalDate.minus(PeriodProvider) for details.

This instance is immutable and unaffected by this method call.

Parameters:
periodProvider - the period to subtract, not null
Returns:
an OffsetDate based on this date with the period subtracted, not null
Throws:
CalendricalException - if the specified period cannot be converted to a Period
CalendricalException - if the result exceeds the supported date range

minusYears

public OffsetDate minusYears(long years)
Returns a copy of this OffsetDate with the specified period in years subtracted.

This method subtracts the specified amount from the years field in three steps:

  1. Subtract the input years to the year field
  2. Check if the resulting date would be invalid
  3. Adjust the day-of-month to the last valid day if necessary

For example, 2008-02-29 (leap year) minus one year would result in the invalid date 2007-02-29 (standard year). Instead of returning an invalid result, the last valid day of the month, 2007-02-28, is selected instead.

This method does the same as minusYears(years, DateResolvers.previousValid()).

This instance is immutable and unaffected by this method call.

Parameters:
years - the years to subtract, may be negative
Returns:
an OffsetDate based on this date with the years subtracted, not null
Throws:
CalendricalException - if the result exceeds the supported date range
See Also:
minusYears(long, javax.time.calendar.DateResolver)

minusYears

public OffsetDate minusYears(long years,
                             DateResolver dateResolver)
Returns a copy of this OffsetDate with the specified period in years subtracted.

This method subtracts the specified amount from the years field in three steps:

  1. Subtract the input years to the year field
  2. Check if the resulting date would be invalid
  3. Adjust the date using dateResolver if necessary

This instance is immutable and unaffected by this method call.

Parameters:
years - the years to subtract, may be negative
dateResolver - the DateResolver to be used if the resulting date would be invalid
Returns:
an OffsetDate based on this date with the years subtracted, not null
Throws:
CalendricalException - if the result exceeds the supported date range

minusMonths

public OffsetDate minusMonths(long months)
Returns a copy of this OffsetDate with the specified period in months subtracted.

This method subtracts the specified amount from the months field in three steps:

  1. Subtract the input months to the month-of-year field
  2. Check if the resulting date would be invalid
  3. Adjust the day-of-month to the last valid day if necessary

For example, 2007-03-31 minus one month would result in the invalid date 2007-02-31. Instead of returning an invalid result, the last valid day of the month, 2007-02-28, is selected instead.

This method does the same as minusMonths(months, DateResolvers.previousValid()).

This instance is immutable and unaffected by this method call.

Parameters:
months - the months to subtract, may be negative
Returns:
an OffsetDate based on this date with the months subtracted, not null
Throws:
CalendricalException - if the result exceeds the supported date range
See Also:
minusMonths(long, javax.time.calendar.DateResolver)

minusMonths

public OffsetDate minusMonths(long months,
                              DateResolver dateResolver)
Returns a copy of this OffsetDate with the specified period in months subtracted.

This method subtracts the specified amount from the months field in three steps:

  1. Subtract the input months to the month-of-year field
  2. Check if the resulting date would be invalid
  3. Adjust the date using dateResolver if necessary

This instance is immutable and unaffected by this method call.

Parameters:
months - the months to subtract, may be negative
dateResolver - the DateResolver to be used if the resulting date would be invalid
Returns:
an OffsetDate based on this date with the months subtracted, not null
Throws:
CalendricalException - if the result exceeds the supported date range

minusWeeks

public OffsetDate minusWeeks(long weeks)
Returns a copy of this OffsetDate with the specified period in weeks subtracted.

This method subtracts the specified amount in weeks from the days field decrementing the month and year fields as necessary to ensure the result remains valid. The result is only invalid if the maximum/minimum year is exceeded.

For example, 2009-01-07 minus one week would result in 2008-12-31.

This instance is immutable and unaffected by this method call.

Parameters:
weeks - the weeks to subtract, may be negative
Returns:
an OffsetDate based on this date with the weeks subtracted, not null
Throws:
CalendricalException - if the result exceeds the supported date range

minusDays

public OffsetDate minusDays(long days)
Returns a copy of this OffsetDate with the specified number of days subtracted.

This method subtracts the specified amount from the days field decrementing the month and year fields as necessary to ensure the result remains valid. The result is only invalid if the maximum/minimum year is exceeded.

For example, 2009-01-01 minus one day would result in 2008-12-31.

This instance is immutable and unaffected by this method call.

Parameters:
days - the days to subtract, may be negative
Returns:
an OffsetDate based on this date with the days subtracted, not null
Throws:
CalendricalException - if the result exceeds the supported date range

matches

public boolean matches(CalendricalMatcher matcher)
Checks whether this OffsetDate matches the specified matcher.

Matchers can be used to query the date. A simple matcher might simply compare one of the fields, such as the year field. A more complex matcher might check if the date is the last day of the month.

Parameters:
matcher - the matcher to use, not null
Returns:
true if this date matches the matcher, false otherwise

matchesCalendrical

public boolean matchesCalendrical(Calendrical calendrical)
Checks if the date extracted from the calendrical matches this date.

This method implements the CalendricalMatcher interface. It is intended that applications use 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

atTime

public OffsetDateTime atTime(OffsetTime time)
Returns an offset date-time formed from this date at the specified time.

This merges the two objects - this and the specified time - to form an instance of OffsetDateTime. If the offset of the time differs from the offset of the date, then the result will have the offset of the date and the time will be adjusted to match.

This instance is immutable and unaffected by this method call.

Parameters:
time - the time to use, not null
Returns:
the offset date-time formed from this date and the specified time, not null

atTime

public OffsetDateTime atTime(LocalTime time)
Returns an offset date-time formed from this date at the specified time.

This merges the two objects - this and the specified time - to form an instance of OffsetDateTime.

This instance is immutable and unaffected by this method call.

Parameters:
time - the time to use, not null
Returns:
the offset date-time formed from this date and the specified time, not null

atTime

public OffsetDateTime atTime(int hourOfDay,
                             int minuteOfHour)
Returns an offset date-time formed from this date at the specified time.

This merges the three values - this and the specified time - to form an instance of OffsetDateTime.

This instance is immutable and unaffected by this method call.

Parameters:
hourOfDay - the hour-of-day to use, from 0 to 23
minuteOfHour - the minute-of-hour to use, from 0 to 59
Returns:
the offset date-time formed from this date and the specified time, not null
Throws:
IllegalCalendarFieldValueException - if the value of any field is out of range

atTime

public OffsetDateTime atTime(int hourOfDay,
                             int minuteOfHour,
                             int secondOfMinute)
Returns an offset date-time formed from this date at the specified time.

This merges the four values - this and the specified time - to form an instance of OffsetDateTime.

This instance is immutable and unaffected by this method call.

Parameters:
hourOfDay - the hour-of-day to use, from 0 to 23
minuteOfHour - the minute-of-hour to use, from 0 to 59
secondOfMinute - the second-of-minute to represent, from 0 to 59
Returns:
the offset date-time formed from this date and the specified time, not null
Throws:
IllegalCalendarFieldValueException - if the value of any field is out of range

atTime

public OffsetDateTime atTime(int hourOfDay,
                             int minuteOfHour,
                             int secondOfMinute,
                             int nanoOfSecond)
Returns an offset date-time formed from this date at the specified time.

This merges the five values - this and the specified time - to form an instance of OffsetDateTime.

This instance is immutable and unaffected by this method call.

Parameters:
hourOfDay - the hour-of-day to use, from 0 to 23
minuteOfHour - the minute-of-hour to use, from 0 to 59
secondOfMinute - the second-of-minute to represent, from 0 to 59
nanoOfSecond - the nano-of-second to represent, from 0 to 999,999,999
Returns:
the offset date-time formed from this date and the specified time, not null
Throws:
IllegalCalendarFieldValueException - if the value of any field is out of range

atMidnight

public OffsetDateTime atMidnight()
Returns an offset date-time formed from this date at the time of midnight.

This merges the two objects - this and LocalTime.MIDNIGHT - to form an instance of OffsetDateTime.

This instance is immutable and unaffected by this method call.

Returns:
the offset date-time formed from this date and the time of midnight, not null

atStartOfDayInZone

public ZonedDateTime atStartOfDayInZone(ZoneId zone)
Returns a zoned date-time from this date at the earliest valid time according to the rules in the time-zone ignoring the current offset.

Time-zone rules, such as daylight savings, mean that not every time on the local time-line exists. If the local date is in a gap or overlap according to the rules then a resolver is used to determine the resultant local time and offset. This method uses the post-gap pre-overlap resolver. This selects the date-time immediately after a gap and the earlier offset in overlaps. This combination chooses the earliest valid local time on the date, typically midnight.

To convert to a specific time in a given time-zone call atTime(LocalTime) followed by OffsetDateTime.atZoneSimilarLocal(ZoneId).

The offset from this date is ignored during the conversion. This ensures that the resultant date-time has the same date as this.

This instance is immutable and unaffected by this method call.

Parameters:
zone - the time-zone to use, not null
Returns:
the zoned date-time formed from this date and the earliest valid time for the zone, not null

toInstant

public Instant toInstant()
Converts this date to an Instant at midnight.

This conversion treats the time component as midnight at the start of the day.

Returns:
an instant equivalent to midnight at the start of this day, not null

toLocalDate

public LocalDate toLocalDate()
Converts this date to a LocalDate.

Returns:
a local date with the same date as this instance, not null

compareTo

public int compareTo(OffsetDate other)
Compares this OffsetDate to another date based on the UTC equivalent dates then local date.

This ordering is consistent with equals(). For example, the following is the comparator order:

  1. 2008-06-29-11:00
  2. 2008-06-29-12:00
  3. 2008-06-30+12:00
  4. 2008-06-29-13:00
Values #2 and #3 represent the same instant on the time-line. When two values represent the same instant, the local date is compared to distinguish them. This step is needed to make the ordering consistent with equals().

Specified by:
compareTo in interface java.lang.Comparable<OffsetDate>
Parameters:
other - the other date to compare to, not null
Returns:
the comparator value, negative if less, positive if greater

isAfter

public boolean isAfter(OffsetDate other)
Checks if the instant of midnight at the start of this OffsetDate is after midnight at the start of the specified date.

This method differs from the comparison in compareTo(javax.time.calendar.OffsetDate) in that it only compares the instant of the date. This is equivalent to using date1.toInstant().isAfter(date2.toInstant());.

Parameters:
other - the other date to compare to, not null
Returns:
true if this is after the instant of the specified date

isBefore

public boolean isBefore(OffsetDate other)
Checks if the instant of midnight at the start of this OffsetDate is before midnight at the start of the specified date.

This method differs from the comparison in compareTo(javax.time.calendar.OffsetDate) in that it only compares the instant of the date. This is equivalent to using date1.toInstant().isBefore(date2.toInstant());.

Parameters:
other - the other date to compare to, not null
Returns:
true if this is before the instant of the specified date

equalInstant

public boolean equalInstant(OffsetDate other)
Checks if the instant of midnight at the start of this OffsetDate equals midnight at the start of the specified date.

This method differs from the comparison in compareTo(javax.time.calendar.OffsetDate) and equals(java.lang.Object) in that it only compares the instant of the date. This is equivalent to using date1.toInstant().equals(date2.toInstant());.

Parameters:
other - the other date to compare to, not null
Returns:
true if the instant equals the instant of the specified date

equals

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

The comparison is based on the local-date and the offset. To compare for the same instant on the time-line, use equalInstant(javax.time.calendar.OffsetDate).

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 date

hashCode

public int hashCode()
A hash code for this date.

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

toString

public java.lang.String toString()
Outputs this date as a String, such as 2007-12-03+01:00.

The output will be in the ISO-8601 format yyyy-MM-ddXXXXX.

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

toString

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

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