Class Period
- java.lang.Object
-
- javax.time.calendar.Period
-
- All Implemented Interfaces:
java.io.Serializable,PeriodProvider
public final class Period extends java.lang.Object implements PeriodProvider, java.io.Serializable
An immutable period consisting of the ISO-8601 year, month, day, hour, minute, second and nanosecond units, such as '3 Months, 4 Days and 7 Hours'.A period is a human-scale description of an amount of time. This class represents the 7 standard definitions from
ISOChronology. The period units used are 'Years', 'Months', 'Days', 'Hours', 'Minutes', 'Seconds' and 'Nanoseconds'.The
ISOChronologydefines a relationship between some of the units:- 12 months in a year
- 24 hours in a day (ignoring time-zones)
- 60 minutes in an hour
- 60 seconds in a minute
- 1,000,000,000 nanoseconds in a second
Period is immutable and thread-safe.
- See Also:
- Serialized Form
-
-
Field Summary
Fields Modifier and Type Field Description private intdaysThe number of days.private inthoursThe number of hours.private intminutesThe number of minutes.private intmonthsThe number of months.private longnanosThe number of nanoseconds.private PeriodFieldsperiodFieldsThe cached PeriodFields.private intsecondsThe number of seconds.private static longserialVersionUIDThe serialization version.private java.lang.StringstringThe cached toString value.private static PeriodUnit[]UNITSThe ISO period units, trusted to not be altered.private intyearsThe number of years.static PeriodZEROA constant for a period of zero.
-
Constructor Summary
Constructors Modifier Constructor Description privatePeriod(int years, int months, int days, int hours, int minutes, int seconds, long nanos)Constructor.
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description static Periodbetween(DateProvider startDateProvider, DateProvider endDateProvider)Obtains aPeriodconsisting of the number of days, months and years between two dates.static PerioddaysBetween(DateProvider startDateProvider, DateProvider endDateProvider)Obtains aPeriodconsisting of the number of days between two dates.PerioddividedBy(int divisor)Returns a new instance with each element in this period divided by the specified value.booleanequals(java.lang.Object obj)Is this period equal to the specified period.intgetDays()Gets the amount of days of this period, if any.intgetHours()Gets the amount of hours of this period, if any.intgetMinutes()Gets the amount of minutes of this period, if any.intgetMonths()Gets the amount of months of this period, if any.longgetNanos()Gets the amount of nanoseconds of this period, if any.intgetNanosInt()Gets the amount of nanoseconds of this period safely converted to anint.intgetSeconds()Gets the amount of seconds of this period, if any.intgetYears()Gets the amount of years of this period, if any.inthashCode()Returns the hash code for this period.booleanisPositive()Checks if this period is fully positive, excluding zero.booleanisPositiveOrZero()Checks if this period is fully positive, including zero.booleanisZero()Checks if this period is zero-length.Periodminus(PeriodProvider periodProvider)Returns a copy of this period with the specified period subtracted.PeriodminusDays(int days)Returns a copy of this period with the specified number of days subtracted.PeriodminusHours(int hours)Returns a copy of this period with the specified number of hours subtracted.PeriodminusMinutes(int minutes)Returns a copy of this period with the specified number of minutes subtracted.PeriodminusMonths(int months)Returns a copy of this period with the specified number of months subtracted.PeriodminusNanos(long nanos)Returns a copy of this period with the specified number of nanoseconds subtracted.PeriodminusSeconds(int seconds)Returns a copy of this period with the specified number of seconds subtracted.PeriodminusYears(int years)Returns a copy of this period with the specified number of years subtracted.static PeriodmonthsBetween(DateProvider startDateProvider, DateProvider endDateProvider)Obtains aPeriodconsisting of the number of months between two dates.PeriodmultipliedBy(int scalar)Returns a new instance with each element in this period multiplied by the specified scalar.Periodnegated()Returns a new instance with each amount in this period negated.Periodnormalized()Returns a copy of this period with all amounts normalized to the standard ranges for date-time fields.PeriodnormalizedWith24HourDays()Returns a copy of this period with all amounts normalized to the standard ranges for date-time fields including the assumption that days are 24 hours long.static Periodof(int years, int months, int days, int hours, int minutes, int seconds)Obtains aPeriodfrom date-based and time-based fields.static Periodof(int years, int months, int days, int hours, int minutes, int seconds, long nanos)Obtains aPeriodfrom date-based and time-based fields.static Periodof(int amount, PeriodUnit unit)Obtains aPeriodfrom an amount and unit.static Periodof(PeriodProvider periodProvider)Obtains aPeriodfrom a provider of periods.static Periodof(Duration duration)Obtains aPeriodfrom aDuration.static PeriodofDateFields(int years, int months, int days)Obtains aPeriodfrom date-based fields.static PeriodofDateFields(PeriodProvider periodProvider)Obtains aPeriodfrom the date-based fields of a period.static PeriodofDays(int days)Obtains aPeriodfrom a number of days.static PeriodofHours(int hours)Obtains aPeriodfrom a number of hours.static PeriodofMinutes(int minutes)Obtains aPeriodfrom a number of minutes.static PeriodofMonths(int months)Obtains aPeriodfrom a number of months.static PeriodofNanos(long nanos)Obtains aPeriodfrom a number of nanoseconds.static PeriodofSeconds(int seconds)Obtains aPeriodfrom a number of seconds.static PeriodofTimeFields(int hours, int minutes, int seconds)Obtains aPeriodfrom time-based fields.static PeriodofTimeFields(int hours, int minutes, int seconds, long nanos)Obtains aPeriodfrom time-based fields.static PeriodofTimeFields(PeriodProvider periodProvider)Obtains aPeriodfrom the time-based fields of a period.static PeriodofYears(int years)Obtains aPeriodfrom a number of years.static Periodparse(java.lang.String text)Obtains aPeriodfrom a text string such asPnYnMnDTnHnMn.nS.Periodplus(PeriodProvider periodProvider)Returns a copy of this period with the specified period added.PeriodplusDays(int days)Returns a copy of this period with the specified number of days added.PeriodplusHours(int hours)Returns a copy of this period with the specified number of hours added.PeriodplusMinutes(int minutes)Returns a copy of this period with the specified number of minutes added.PeriodplusMonths(int months)Returns a copy of this period with the specified number of months added.PeriodplusNanos(long nanos)Returns a copy of this period with the specified number of nanoseconds added.PeriodplusSeconds(int seconds)Returns a copy of this period with the specified number of seconds added.PeriodplusYears(int years)Returns a copy of this period with the specified number of years added.private java.lang.ObjectreadResolve()Resolves singletons.DurationtoDuration()Calculates the accurate duration of this period.DurationtoDurationWith24HourDays()Calculates the accurate duration of this period.DurationtoEstimatedDuration()Estimates the duration of this period.PeriodFieldstoPeriodFields()Converts this period to aPeriodFields.java.lang.StringtoString()Returns a string representation of the amount of time.longtotalDaysWith24HourDays()Gets the total number of days represented by this period using standard assumptions for the meaning of day, hour, minute and second.longtotalHours()Gets the total number of hours represented by this period using standard assumptions for the meaning of hour, minute and second.longtotalHoursWith24HourDays()Gets the total number of hours represented by this period using standard assumptions for the meaning of day, hour, minute and second.longtotalMinutes()Gets the total number of minutes represented by this period using standard assumptions for the meaning of hour, minute and second.longtotalMinutesWith24HourDays()Gets the total number of minutes represented by this period using standard assumptions for the meaning of day, hour, minute and second.longtotalMonths()Gets the total number of months represented by this period using standard assumptions for the meaning of month.longtotalNanos()Gets the total number of nanoseconds represented by this period using standard assumptions for the meaning of hour, minute and second.longtotalNanosWith24HourDays()Gets the total number of nanoseconds represented by this period using standard assumptions for the meaning of day, hour, minute and second.longtotalSeconds()Gets the total number of seconds represented by this period using standard assumptions for the meaning of hour, minute and second.longtotalSecondsWith24HourDays()Gets the total number of seconds represented by this period using standard assumptions for the meaning of day, hour, minute and second.longtotalYears()Gets the total number of years represented by this period using standard assumptions for the meaning of month.PeriodwithDateFieldsOnly()Returns a copy of this period with only the date-based fields retained.PeriodwithDays(int days)Returns a copy of this period with the specified amount of days.PeriodwithHours(int hours)Returns a copy of this period with the specified amount of hours.PeriodwithMinutes(int minutes)Returns a copy of this period with the specified amount of minutes.PeriodwithMonths(int months)Returns a copy of this period with the specified amount of months.PeriodwithNanos(long nanos)Returns a copy of this period with the specified amount of nanoseconds.PeriodwithSeconds(int seconds)Returns a copy of this period with the specified amount of seconds.PeriodwithTimeFieldsOnly()Returns a copy of this period with only the time-based fields retained.PeriodwithYears(int years)Returns a copy of this period with the specified amount of years.static PeriodyearsBetween(DateProvider startDateProvider, DateProvider endDateProvider)Obtains aPeriodconsisting of the number of years between two dates.
-
-
-
Field Detail
-
ZERO
public static final Period ZERO
A constant for a period of zero.
-
serialVersionUID
private static final long serialVersionUID
The serialization version.- See Also:
- Constant Field Values
-
UNITS
private static final PeriodUnit[] UNITS
The ISO period units, trusted to not be altered.
-
years
private final int years
The number of years.
-
months
private final int months
The number of months.
-
days
private final int days
The number of days.
-
hours
private final int hours
The number of hours.
-
minutes
private final int minutes
The number of minutes.
-
seconds
private final int seconds
The number of seconds.
-
nanos
private final long nanos
The number of nanoseconds.
-
periodFields
private transient volatile PeriodFields periodFields
The cached PeriodFields.
-
string
private transient volatile java.lang.String string
The cached toString value.
-
-
Method Detail
-
of
public static Period of(int years, int months, int days, int hours, int minutes, int seconds)
Obtains aPeriodfrom date-based and time-based fields.This creates an instance based on years, months, days, hours, minutes and seconds.
- Parameters:
years- the amount of years, may be negativemonths- the amount of months, may be negativedays- the amount of days, may be negativehours- the amount of hours, may be negativeminutes- the amount of minutes, may be negativeseconds- the amount of seconds, may be negative- Returns:
- the period, never null
-
of
public static Period of(int years, int months, int days, int hours, int minutes, int seconds, long nanos)
Obtains aPeriodfrom date-based and time-based fields.This creates an instance based on years, months, days, hours, minutes, seconds and nanoseconds. The resulting period will have normalized seconds and nanoseconds.
- Parameters:
years- the amount of years, may be negativemonths- the amount of months, may be negativedays- the amount of days, may be negativehours- the amount of hours, may be negativeminutes- the amount of minutes, may be negativeseconds- the amount of seconds, may be negativenanos- the amount of nanos, may be negative- Returns:
- the period, never null
-
of
public static Period of(PeriodProvider periodProvider)
Obtains aPeriodfrom a provider of periods.A
Periodsupports 7 units, ISO years, months, days, hours, minutes, seconds and nanoseconds. Any period that contains amounts in these units, or in units that can be converted to these units will be accepted. If the provider contains any other unit, an exception is thrown.- Parameters:
periodProvider- a provider of period information, not null- Returns:
- the period, never null
- Throws:
CalendricalException- if the provided period cannot be converted to the supported unitsjava.lang.ArithmeticException- if any provided amount, exceeds the supported range
-
ofDateFields
public static Period ofDateFields(int years, int months, int days)
Obtains aPeriodfrom date-based fields.This creates an instance based on years, months and days.
- Parameters:
years- the amount of years, may be negativemonths- the amount of months, may be negativedays- the amount of days, may be negative- Returns:
- the period, never null
-
ofDateFields
public static Period ofDateFields(PeriodProvider periodProvider)
Obtains aPeriodfrom the date-based fields of a period.A
Periodsupports 7 units, ISO years, months, days, hours, minutes, seconds and nanoseconds. Any period that contains amounts in these units, or in units that can be converted to these units will be accepted. If the provider contains any other unit, an exception is thrown.Once the initial conversion to the 7 units is complete, the period is created using just the date-based fields - years, months and days. The time-based fields are ignored and will be zero in the created period.
- Parameters:
periodProvider- a provider of period information, not null- Returns:
- the period containing only date-based fields, never null
- Throws:
CalendricalException- if the provided period cannot be converted to the supported unitsjava.lang.ArithmeticException- if any provided amount, exceeds the supported range
-
ofTimeFields
public static Period ofTimeFields(int hours, int minutes, int seconds)
Obtains aPeriodfrom time-based fields.This creates an instance based on hours, minutes and seconds.
- Parameters:
hours- the amount of hours, may be negativeminutes- the amount of minutes, may be negativeseconds- the amount of seconds, may be negative- Returns:
- the period, never null
-
ofTimeFields
public static Period ofTimeFields(int hours, int minutes, int seconds, long nanos)
Obtains aPeriodfrom time-based fields.This creates an instance based on hours, minutes, seconds and nanoseconds.
- Parameters:
hours- the amount of hours, may be negativeminutes- the amount of minutes, may be negativeseconds- the amount of seconds, may be negativenanos- the amount of nanos, may be negative- Returns:
- the period, never null
-
ofTimeFields
public static Period ofTimeFields(PeriodProvider periodProvider)
Obtains aPeriodfrom the time-based fields of a period.A
Periodsupports 7 units, ISO years, months, days, hours, minutes, seconds and nanoseconds. Any period that contains amounts in these units, or in units that can be converted to these units will be accepted. If the provider contains any other unit, an exception is thrown.Once the initial conversion to the 7 units is complete, the period is created using just the time-based fields - hours, minutes, seconds and nanoseconds. The date-based fields are ignored and will be zero in the created period.
- Parameters:
periodProvider- a provider of period information, not null- Returns:
- the period containing only time-based fields, never null
- Throws:
CalendricalException- if the provided period cannot be converted to the supported unitsjava.lang.ArithmeticException- if any provided amount, exceeds the supported range
-
of
public static Period of(int amount, PeriodUnit unit)
Obtains aPeriodfrom an amount and unit.The parameters represent the two parts of a phrase like '6 Days'.
A
Periodsupports 7 units, ISO years, months, days, hours, minutes, seconds and nanoseconds. The unit must be one of these, or be able to be converted to one of these.- Parameters:
amount- the amount of the period, measured in terms of the unit, positive or negativeunit- the unit that the period is measured in, not null- Returns:
- the period, never null
-
ofYears
public static Period ofYears(int years)
Obtains aPeriodfrom a number of years.- Parameters:
years- the amount of years, may be negative- Returns:
- the period, never null
-
ofMonths
public static Period ofMonths(int months)
Obtains aPeriodfrom a number of months.- Parameters:
months- the amount of months, may be negative- Returns:
- the period, never null
-
ofDays
public static Period ofDays(int days)
Obtains aPeriodfrom a number of days.- Parameters:
days- the amount of days, may be negative- Returns:
- the period, never null
-
ofHours
public static Period ofHours(int hours)
Obtains aPeriodfrom a number of hours.- Parameters:
hours- the amount of hours, may be negative- Returns:
- the period, never null
-
ofMinutes
public static Period ofMinutes(int minutes)
Obtains aPeriodfrom a number of minutes.- Parameters:
minutes- the amount of minutes, may be negative- Returns:
- the period, never null
-
ofSeconds
public static Period ofSeconds(int seconds)
Obtains aPeriodfrom a number of seconds.- Parameters:
seconds- the amount of seconds, may be negative- Returns:
- the period, never null
-
ofNanos
public static Period ofNanos(long nanos)
Obtains aPeriodfrom a number of nanoseconds.- Parameters:
nanos- the amount of nanos, may be negative- Returns:
- the period, never null
-
of
public static Period of(Duration duration)
Obtains aPeriodfrom aDuration.The created period will have normalized values for the hours, minutes, seconds and nanoseconds fields. The years, months and days fields will be zero.
To populate the days field, call
normalizedWith24HourDays()on the created period.- Parameters:
duration- the duration to create from, not null- Returns:
- the
PeriodFieldsinstance, never null - Throws:
java.lang.ArithmeticException- if the result exceeds the supported period range
-
between
public static Period between(DateProvider startDateProvider, DateProvider endDateProvider)
Obtains aPeriodconsisting of the number of days, months and years between two dates.The start date is included, but the end date is not. Only whole years count. For example, from
2010-01-15to2011-03-18is one year, two months and three days.The result of this method can be a negative period if the end is before the start. The negative sign will be the same in each of year, month and day.
Adding the result of this method to the start date will always yield the end date.
- Parameters:
startDateProvider- the start date, inclusive, not nullendDateProvider- the end date, exclusive, not null- Returns:
- the period in days, never null
- Throws:
java.lang.ArithmeticException- if the period exceeds the supported range
-
yearsBetween
public static Period yearsBetween(DateProvider startDateProvider, DateProvider endDateProvider)
Obtains aPeriodconsisting of the number of years between two dates.The start date is included, but the end date is not. Only whole years count. For example, from
2010-01-15to2012-01-15is two years, whereas from2010-01-15to2012-01-14is only one year.The result of this method can be a negative period if the end is before the start.
- Parameters:
startDateProvider- the start date, inclusive, not nullendDateProvider- the end date, exclusive, not null- Returns:
- the period in days, never null
- Throws:
java.lang.ArithmeticException- if the period exceeds the supported range
-
monthsBetween
public static Period monthsBetween(DateProvider startDateProvider, DateProvider endDateProvider)
Obtains aPeriodconsisting of the number of months between two dates.The start date is included, but the end date is not. Only whole months count. For example, from
2010-01-15to2010-03-15is two months, whereas from2010-01-15to2010-03-14is only one month.The result of this method can be a negative period if the end is before the start.
- Parameters:
startDateProvider- the start date, inclusive, not nullendDateProvider- the end date, exclusive, not null- Returns:
- the period in days, never null
- Throws:
java.lang.ArithmeticException- if the period exceeds the supported range
-
daysBetween
public static Period daysBetween(DateProvider startDateProvider, DateProvider endDateProvider)
Obtains aPeriodconsisting of the number of days between two dates.The start date is included, but the end date is not. For example, from
2010-01-15to2010-01-18is three days.The result of this method can be a negative period if the end is before the start.
- Parameters:
startDateProvider- the start date, inclusive, not nullendDateProvider- the end date, exclusive, not null- Returns:
- the period in days, never null
- Throws:
java.lang.ArithmeticException- if the period exceeds the supported range
-
parse
public static Period parse(java.lang.String text)
Obtains aPeriodfrom a text string such asPnYnMnDTnHnMn.nS.This will parse the string produced by
toString()which is a subset of the ISO8601 period formatPnYnMnDTnHnMn.nS.The string consists of a series of numbers with a suffix identifying their meaning. The values, and suffixes, must be in the sequence year, month, day, hour, minute, second. Any of the number/suffix pairs may be omitted providing at least one is present. If the period is zero, the value is normally represented as
PT0S. The numbers must consist of ASCII digits. Any of the numbers may be negative. Negative zero is not accepted. The number of nanoseconds is expressed as an optional fraction of the seconds. There must be at least one digit before any decimal point. There must be between 1 and 9 inclusive digits after any decimal point. The letters will all be accepted in upper or lower case. The decimal point may be either a dot or a comma.- Parameters:
text- the text to parse, not null- Returns:
- the parsed period, never null
- Throws:
CalendricalParseException- if the text cannot be parsed to a Period
-
readResolve
private java.lang.Object readResolve()
Resolves singletons.- Returns:
- the resolved instance
-
isZero
public boolean isZero()
Checks if this period is zero-length.- Returns:
- true if this period is zero-length
-
isPositive
public boolean isPositive()
Checks if this period is fully positive, excluding zero.This checks whether all the amounts in the period are positive, defined as greater than zero.
- Returns:
- true if this period is fully positive excluding zero
-
isPositiveOrZero
public boolean isPositiveOrZero()
Checks if this period is fully positive, including zero.This checks whether all the amounts in the period are positive, defined as greater than or equal to zero.
- Returns:
- true if this period is fully positive including zero
-
getYears
public int getYears()
Gets the amount of years of this period, if any.- Returns:
- the amount of years of this period
-
getMonths
public int getMonths()
Gets the amount of months of this period, if any.- Returns:
- the amount of months of this period
-
getDays
public int getDays()
Gets the amount of days of this period, if any.- Returns:
- the amount of days of this period
-
getHours
public int getHours()
Gets the amount of hours of this period, if any.- Returns:
- the amount of hours of this period
-
getMinutes
public int getMinutes()
Gets the amount of minutes of this period, if any.- Returns:
- the amount of minutes of this period
-
getSeconds
public int getSeconds()
Gets the amount of seconds of this period, if any.- Returns:
- the amount of seconds of this period
-
getNanos
public long getNanos()
Gets the amount of nanoseconds of this period, if any.- Returns:
- the amount of nanoseconds of this period
-
getNanosInt
public int getNanosInt()
Gets the amount of nanoseconds of this period safely converted to anint.- Returns:
- the amount of nanoseconds of this period
- Throws:
java.lang.ArithmeticException- if the number of nanoseconds exceeds the capacity of anint
-
withYears
public Period withYears(int years)
Returns a copy of this period with the specified amount of years.This method will only affect the the years field. All other fields are left untouched.
This instance is immutable and unaffected by this method call.
- Parameters:
years- the years to represent- Returns:
- a
Periodbased on this period with the requested years, never null
-
withMonths
public Period withMonths(int months)
Returns a copy of this period with the specified amount of months.This method will only affect the the months field. All other fields are left untouched.
This instance is immutable and unaffected by this method call.
- Parameters:
months- the months to represent- Returns:
- a
Periodbased on this period with the requested months, never null
-
withDays
public Period withDays(int days)
Returns a copy of this period with the specified amount of days.This method will only affect the the days field. All other fields are left untouched.
This instance is immutable and unaffected by this method call.
- Parameters:
days- the days to represent- Returns:
- a
Periodbased on this period with the requested days, never null
-
withHours
public Period withHours(int hours)
Returns a copy of this period with the specified amount of hours.This method will only affect the the hours field. All other fields are left untouched.
This instance is immutable and unaffected by this method call.
- Parameters:
hours- the hours to represent- Returns:
- a
Periodbased on this period with the requested hours, never null
-
withMinutes
public Period withMinutes(int minutes)
Returns a copy of this period with the specified amount of minutes.This method will only affect the the minutes field. All other fields are left untouched.
This instance is immutable and unaffected by this method call.
- Parameters:
minutes- the minutes to represent- Returns:
- a
Periodbased on this period with the requested minutes, never null
-
withSeconds
public Period withSeconds(int seconds)
Returns a copy of this period with the specified amount of seconds.This method will only affect the the seconds field. All other fields are left untouched.
This instance is immutable and unaffected by this method call.
- Parameters:
seconds- the seconds to represent- Returns:
- a
Periodbased on this period with the requested seconds, never null
-
withNanos
public Period withNanos(long nanos)
Returns a copy of this period with the specified amount of nanoseconds.This method will only affect the the nanoseconds field. All other fields are left untouched.
This instance is immutable and unaffected by this method call.
- Parameters:
nanos- the nanoseconds to represent- Returns:
- a
Periodbased on this period with the requested nanoseconds, never null
-
withDateFieldsOnly
public Period withDateFieldsOnly()
Returns a copy of this period with only the date-based fields retained.The returned period will have the same values for the date-based fields (years, months and days) and zero values for the time-based fields.
This instance is immutable and unaffected by this method call.
- Returns:
- a
Periodbased on this period with zero values for time-based fields, never null
-
withTimeFieldsOnly
public Period withTimeFieldsOnly()
Returns a copy of this period with only the time-based fields retained.The returned period will have the same values for the time-based fields (hours, minutes, seconds and nanoseconds) and zero values for the date-based fields.
This instance is immutable and unaffected by this method call.
- Returns:
- a
Periodbased on this period with zero values for date-based fields, never null
-
plus
public Period plus(PeriodProvider periodProvider)
Returns a copy of this period with the specified period added.This instance is immutable and unaffected by this method call.
- Parameters:
periodProvider- the period to add, not null- Returns:
- a
Periodbased on this period with the requested period added, never null - Throws:
java.lang.ArithmeticException- if the capacity of any field is exceeded
-
plusYears
public Period plusYears(int years)
Returns a copy of this period with the specified number of years added.This method will only affect the the years field. All other fields are left untouched.
This instance is immutable and unaffected by this method call.
- Parameters:
years- the years to add, positive or negative- Returns:
- a
Periodbased on this period with the requested years added, never null - Throws:
java.lang.ArithmeticException- if the capacity of anintis exceeded
-
plusMonths
public Period plusMonths(int months)
Returns a copy of this period with the specified number of months added.This method will only affect the the months field. All other fields are left untouched.
This instance is immutable and unaffected by this method call.
- Parameters:
months- the months to add, positive or negative- Returns:
- a
Periodbased on this period with the requested months added, never null - Throws:
java.lang.ArithmeticException- if the capacity of anintis exceeded
-
plusDays
public Period plusDays(int days)
Returns a copy of this period with the specified number of days added.This method will only affect the the days field. All other fields are left untouched.
This instance is immutable and unaffected by this method call.
- Parameters:
days- the days to add, positive or negative- Returns:
- a
Periodbased on this period with the requested days added, never null - Throws:
java.lang.ArithmeticException- if the capacity of anintis exceeded
-
plusHours
public Period plusHours(int hours)
Returns a copy of this period with the specified number of hours added.This method will only affect the the hours field. All other fields are left untouched.
This instance is immutable and unaffected by this method call.
- Parameters:
hours- the hours to add, positive or negative- Returns:
- a
Periodbased on this period with the requested hours added, never null - Throws:
java.lang.ArithmeticException- if the capacity of anintis exceeded
-
plusMinutes
public Period plusMinutes(int minutes)
Returns a copy of this period with the specified number of minutes added.This method will only affect the the minutes field. All other fields are left untouched.
This instance is immutable and unaffected by this method call.
- Parameters:
minutes- the minutes to add, positive or negative- Returns:
- a
Periodbased on this period with the requested minutes added, never null - Throws:
java.lang.ArithmeticException- if the capacity of anintis exceeded
-
plusSeconds
public Period plusSeconds(int seconds)
Returns a copy of this period with the specified number of seconds added.This method will only affect the the seconds field. All other fields are left untouched.
This instance is immutable and unaffected by this method call.
- Parameters:
seconds- the seconds to add, positive or negative- Returns:
- a
Periodbased on this period with the requested seconds added, never null - Throws:
java.lang.ArithmeticException- if the capacity of anintis exceeded
-
plusNanos
public Period plusNanos(long nanos)
Returns a copy of this period with the specified number of nanoseconds added.This method will only affect the the nanoseconds field. All other fields are left untouched.
This instance is immutable and unaffected by this method call.
- Parameters:
nanos- the nanoseconds to add, positive or negative- Returns:
- a
Periodbased on this period with the requested nanoseconds added, never null - Throws:
java.lang.ArithmeticException- if the capacity of alongis exceeded
-
minus
public Period minus(PeriodProvider periodProvider)
Returns a copy of this period with the specified period subtracted.This instance is immutable and unaffected by this method call.
- Parameters:
periodProvider- the period to subtract, not null- Returns:
- a
Periodbased on this period with the requested period subtracted, never null - Throws:
java.lang.ArithmeticException- if the capacity of any field is exceeded
-
minusYears
public Period minusYears(int years)
Returns a copy of this period with the specified number of years subtracted.This method will only affect the the years field. All other fields are left untouched.
This instance is immutable and unaffected by this method call.
- Parameters:
years- the years to subtract, positive or negative- Returns:
- a
Periodbased on this period with the requested years subtracted, never null - Throws:
java.lang.ArithmeticException- if the capacity of anintis exceeded
-
minusMonths
public Period minusMonths(int months)
Returns a copy of this period with the specified number of months subtracted.This method will only affect the the months field. All other fields are left untouched.
This instance is immutable and unaffected by this method call.
- Parameters:
months- the months to subtract, positive or negative- Returns:
- a
Periodbased on this period with the requested months subtracted, never null - Throws:
java.lang.ArithmeticException- if the capacity of anintis exceeded
-
minusDays
public Period minusDays(int days)
Returns a copy of this period with the specified number of days subtracted.This method will only affect the the days field. All other fields are left untouched.
This instance is immutable and unaffected by this method call.
- Parameters:
days- the days to subtract, positive or negative- Returns:
- a
Periodbased on this period with the requested days subtracted, never null - Throws:
java.lang.ArithmeticException- if the capacity of anintis exceeded
-
minusHours
public Period minusHours(int hours)
Returns a copy of this period with the specified number of hours subtracted.This method will only affect the the hours field. All other fields are left untouched.
This instance is immutable and unaffected by this method call.
- Parameters:
hours- the hours to subtract, positive or negative- Returns:
- a
Periodbased on this period with the requested hours subtracted, never null - Throws:
java.lang.ArithmeticException- if the capacity of anintis exceeded
-
minusMinutes
public Period minusMinutes(int minutes)
Returns a copy of this period with the specified number of minutes subtracted.This method will only affect the the minutes field. All other fields are left untouched.
This instance is immutable and unaffected by this method call.
- Parameters:
minutes- the minutes to subtract, positive or negative- Returns:
- a
Periodbased on this period with the requested minutes subtracted, never null - Throws:
java.lang.ArithmeticException- if the capacity of anintis exceeded
-
minusSeconds
public Period minusSeconds(int seconds)
Returns a copy of this period with the specified number of seconds subtracted.This method will only affect the the seconds field. All other fields are left untouched.
This instance is immutable and unaffected by this method call.
- Parameters:
seconds- the seconds to subtract, positive or negative- Returns:
- a
Periodbased on this period with the requested seconds subtracted, never null - Throws:
java.lang.ArithmeticException- if the capacity of anintis exceeded
-
minusNanos
public Period minusNanos(long nanos)
Returns a copy of this period with the specified number of nanoseconds subtracted.This method will only affect the the nanoseconds field. All other fields are left untouched.
This instance is immutable and unaffected by this method call.
- Parameters:
nanos- the nanoseconds to subtract, positive or negative- Returns:
- a
Periodbased on this period with the requested nanoseconds subtracted, never null - Throws:
java.lang.ArithmeticException- if the capacity of alongis exceeded
-
multipliedBy
public Period multipliedBy(int scalar)
Returns a new instance with each element in this period multiplied by the specified scalar.- Parameters:
scalar- the scalar to multiply by, not null- Returns:
- a
Periodbased on this period with the amounts multiplied by the scalar, never null - Throws:
java.lang.ArithmeticException- if the capacity of any field is exceeded
-
dividedBy
public Period dividedBy(int divisor)
Returns a new instance with each element in this period divided by the specified value.The implementation simply divides each separate field by the divisor using integer division.
- Parameters:
divisor- the value to divide by, not null- Returns:
- a
Periodbased on this period with the amounts divided by the divisor, never null - Throws:
java.lang.ArithmeticException- if dividing by zero
-
negated
public Period negated()
Returns a new instance with each amount in this period negated.- Returns:
- a
Periodbased on this period with the amounts negated, never null - Throws:
java.lang.ArithmeticException- if any field has the minimum value
-
normalized
public Period normalized()
Returns a copy of this period with all amounts normalized to the standard ranges for date-time fields.Two normalizations occur, one for years and months, and one for hours, minutes, seconds and nanoseconds. Days are not normalized, as a day may vary in length at daylight savings cutover. For example, a period of
P1Y15M1DT28H61Mwill be normalized toP2Y3M1DT29H1M.Note that this method normalizes using assumptions:
- 12 months in a year
- 60 minutes in an hour
- 60 seconds in a minute
- 1,000,000,000 nanoseconds in a second
This instance is immutable and unaffected by this method call.
- Returns:
- a
Periodbased on this period with the amounts normalized, never null - Throws:
java.lang.ArithmeticException- if the capacity of any field is exceeded
-
normalizedWith24HourDays
public Period normalizedWith24HourDays()
Returns a copy of this period with all amounts normalized to the standard ranges for date-time fields including the assumption that days are 24 hours long.Two normalizations occur, one for years and months, and one for days, hours, minutes, seconds and nanoseconds. For example, a period of
P1Y15M1DT28Hwill be normalized toP2Y3M2DT4H.Note that this method normalizes using assumptions:
- 12 months in a year
- 24 hours in a day
- 60 minutes in an hour
- 60 seconds in a minute
- 1,000,000,000 nanoseconds in a second
This instance is immutable and unaffected by this method call.
- Returns:
- a
Periodbased on this period with the amounts normalized, never null - Throws:
java.lang.ArithmeticException- if the capacity of any field is exceeded
-
totalYears
public long totalYears()
Gets the total number of years represented by this period using standard assumptions for the meaning of month.This method ignores days, hours, minutes, seconds and nanos. It calculates using the assumption:
- 12 months in a year
- Returns:
- the total number of years
- Throws:
java.lang.ArithmeticException- if the capacity of alongis exceeded
-
totalMonths
public long totalMonths()
Gets the total number of months represented by this period using standard assumptions for the meaning of month.This method ignores days, hours, minutes, seconds and nanos. It calculates using the assumption:
- 12 months in a year
- Returns:
- the total number of years
- Throws:
java.lang.ArithmeticException- if the capacity of alongis exceeded
-
totalDaysWith24HourDays
public long totalDaysWith24HourDays()
Gets the total number of days represented by this period using standard assumptions for the meaning of day, hour, minute and second.This method ignores years and months. It calculates using assumptions:
- 24 hours in a day
- 60 minutes in an hour
- 60 seconds in a minute
- 1,000,000,000 nanoseconds in a second
- Returns:
- the total number of days
-
totalHours
public long totalHours()
Gets the total number of hours represented by this period using standard assumptions for the meaning of hour, minute and second.This method ignores years, months and days. It calculates using assumptions:
- 60 minutes in an hour
- 60 seconds in a minute
- 1,000,000,000 nanoseconds in a second
- Returns:
- the total number of hours
-
totalHoursWith24HourDays
public long totalHoursWith24HourDays()
Gets the total number of hours represented by this period using standard assumptions for the meaning of day, hour, minute and second.This method ignores years and months. It calculates using assumptions:
- 24 hours in a day
- 60 minutes in an hour
- 60 seconds in a minute
- 1,000,000,000 nanoseconds in a second
- Returns:
- the total number of hours
-
totalMinutes
public long totalMinutes()
Gets the total number of minutes represented by this period using standard assumptions for the meaning of hour, minute and second.This method ignores years, months and days. It calculates using assumptions:
- 60 minutes in an hour
- 60 seconds in a minute
- 1,000,000,000 nanoseconds in a second
- Returns:
- the total number of minutes
-
totalMinutesWith24HourDays
public long totalMinutesWith24HourDays()
Gets the total number of minutes represented by this period using standard assumptions for the meaning of day, hour, minute and second.This method ignores years and months. It calculates using assumptions:
- 24 hours in a day
- 60 minutes in an hour
- 60 seconds in a minute
- 1,000,000,000 nanoseconds in a second
- Returns:
- the total number of minutes
-
totalSeconds
public long totalSeconds()
Gets the total number of seconds represented by this period using standard assumptions for the meaning of hour, minute and second.This method ignores years, months and days. It calculates using assumptions:
- 60 minutes in an hour
- 60 seconds in a minute
- 1,000,000,000 nanoseconds in a second
- Returns:
- the total number of seconds
-
totalSecondsWith24HourDays
public long totalSecondsWith24HourDays()
Gets the total number of seconds represented by this period using standard assumptions for the meaning of day, hour, minute and second.This method ignores years and months. It calculates using assumptions:
- 24 hours in a day
- 60 minutes in an hour
- 60 seconds in a minute
- 1,000,000,000 nanoseconds in a second
- Returns:
- the total number of seconds
-
totalNanos
public long totalNanos()
Gets the total number of nanoseconds represented by this period using standard assumptions for the meaning of hour, minute and second.This method ignores years, months and days. It calculates using assumptions:
- 60 minutes in an hour
- 60 seconds in a minute
- 1,000,000,000 nanoseconds in a second
- Returns:
- the total number of nanoseconds
- Throws:
java.lang.ArithmeticException- if the capacity of alongis exceeded
-
totalNanosWith24HourDays
public long totalNanosWith24HourDays()
Gets the total number of nanoseconds represented by this period using standard assumptions for the meaning of day, hour, minute and second.This method ignores years and months. It calculates using assumptions:
- 24 hours in a day
- 60 minutes in an hour
- 60 seconds in a minute
- 1,000,000,000 nanoseconds in a second
- Returns:
- the total number of nanoseconds
- Throws:
java.lang.ArithmeticException- if the capacity of alongis exceeded
-
toPeriodFields
public PeriodFields toPeriodFields()
Converts this period to aPeriodFields.The returned
PeriodFieldswill only contain the non-zero amounts.- Specified by:
toPeriodFieldsin interfacePeriodProvider- Returns:
- a
PeriodFieldsequivalent to this period, never null
-
toEstimatedDuration
public Duration toEstimatedDuration()
Estimates the duration of this period.Each
PeriodUnitcontains an estimated duration for that unit. The per-unit estimate allows an estimate to be calculated for the whole period including years, months and days. The estimate will equal theaccuratecalculation if the years, months and days fields are zero.- Returns:
- the estimated duration of this period, never null
- Throws:
java.lang.ArithmeticException- if the calculation overflows
-
toDuration
public Duration toDuration()
Calculates the accurate duration of this period.The calculation uses the hours, minutes, seconds and nanoseconds fields. If years, months or days are present an exception is thrown.
The duration is calculated using assumptions:
- 60 minutes in an hour
- 60 seconds in a minute
- 1,000,000,000 nanoseconds in a second
- Returns:
- a
Durationequivalent to this period, never null - Throws:
CalendricalException- if the period cannot be converted as it contains years/months/days
-
toDurationWith24HourDays
public Duration toDurationWith24HourDays()
Calculates the accurate duration of this period.The calculation uses the days, hours, minutes, seconds and nanoseconds fields. If years or months are present an exception is thrown.
The duration is calculated using assumptions:
- 24 hours in a day
- 60 minutes in an hour
- 60 seconds in a minute
- 1,000,000,000 nanoseconds in a second
- Returns:
- a
Durationequivalent to this period, never null - Throws:
CalendricalException- if the period cannot be converted as it contains years/months/days
-
equals
public boolean equals(java.lang.Object obj)
Is this period equal to the specified period.- Overrides:
equalsin classjava.lang.Object- Parameters:
obj- the other period to compare to, null returns false- Returns:
- true if this instance is equal to the specified period
-
hashCode
public int hashCode()
Returns the hash code for this period.- Overrides:
hashCodein classjava.lang.Object- Returns:
- a suitable hash code
-
toString
public java.lang.String toString()
Returns a string representation of the amount of time.- Overrides:
toStringin classjava.lang.Object- Returns:
- the amount of time in ISO8601 string format
-
-