BasePeriod is an abstract implementation of ReadablePeriod that stores
data in a
PeriodType
and an
int[]
.
This class should generally not be used directly by API users.
The
ReadablePeriod
interface should be used when different
kinds of period objects are to be referenced.
BasePeriod subclasses may be mutable and not thread-safe.
BasePeriod
protected BasePeriod(Object period,
PeriodType type,
Chronology chrono)
period
- the period to converttype
- which set of fields this period supports, null means use type from objectchrono
- the chronology to use, null means ISO default
BasePeriod
protected BasePeriod(int years,
int months,
int weeks,
int days,
int hours,
int minutes,
int seconds,
int millis,
PeriodType type)
Creates a period from a set of field values.
years
- amount of years in this period, which must be zero if unsupportedmonths
- amount of months in this period, which must be zero if unsupportedweeks
- amount of weeks in this period, which must be zero if unsupporteddays
- amount of days in this period, which must be zero if unsupportedhours
- amount of hours in this period, which must be zero if unsupportedminutes
- amount of minutes in this period, which must be zero if unsupportedseconds
- amount of seconds in this period, which must be zero if unsupportedmillis
- amount of milliseconds in this period, which must be zero if unsupportedtype
- which set of fields this period supports
BasePeriod
protected BasePeriod(int[] values,
PeriodType type)
Constructor used when we trust ourselves.
Do not expose publically.
values
- the values to use, not null, not clonedtype
- which set of fields this period supports, not null
BasePeriod
protected BasePeriod(long startInstant,
long endInstant,
PeriodType type,
Chronology chrono)
Creates a period from the given interval endpoints.
startInstant
- interval start, in millisecondsendInstant
- interval end, in millisecondstype
- which set of fields this period supports, null means standardchrono
- the chronology to use, null means ISO default
BasePeriod
protected BasePeriod(long duration,
PeriodType type,
Chronology chrono)
Creates a period from the given millisecond duration, which is only really
suitable for durations less than one day.
Only fields that are precise will be used.
Thus the largest precise field may have a large value.
duration
- the duration, in millisecondstype
- which set of fields this period supports, null means standardchrono
- the chronology to use, null means ISO default
BasePeriod
protected BasePeriod(ReadableDuration duration,
ReadableInstant endInstant,
PeriodType type)
Creates a period from the given duration and end point.
duration
- the duration of the interval, null means zero-lengthendInstant
- the interval end, null means nowtype
- which set of fields this period supports, null means standard
BasePeriod
protected BasePeriod(ReadableInstant startInstant,
ReadableDuration duration,
PeriodType type)
Creates a period from the given start point and duration.
startInstant
- the interval start, null means nowduration
- the duration of the interval, null means zero-lengthtype
- which set of fields this period supports, null means standard
BasePeriod
protected BasePeriod(ReadableInstant startInstant,
ReadableInstant endInstant,
PeriodType type)
Creates a period from the given interval endpoints.
startInstant
- interval start, null means nowendInstant
- interval end, null means nowtype
- which set of fields this period supports, null means standard
BasePeriod
protected BasePeriod(ReadablePartial start,
ReadablePartial end,
PeriodType type)
Creates a period from the given duration and end point.
The two partials must contain the same fields, thus you can
specify two
LocalDate
objects, or two
LocalTime
objects, but not one of each.
As these are Partial objects, time zones have no effect on the result.
The two partials must also both be contiguous - see
DateTimeUtils.isContiguous(ReadablePartial)
for a
definition. Both
LocalDate
and
LocalTime
are contiguous.
start
- the start of the period, must not be nullend
- the end of the period, must not be nulltype
- which set of fields this period supports, null means standard
addField
protected void addField(DurationFieldType field,
int value)
Adds the value of a field in this period.
field
- the field to setvalue
- the value to set
addFieldInto
protected void addFieldInto(int[] values,
DurationFieldType field,
int value)
Adds the value of a field in this period.
values
- the array of values to updatefield
- the field to setvalue
- the value to set
addPeriod
protected void addPeriod(ReadablePeriod period)
Adds the fields from another period.
period
- the period to add from, not null
addPeriodInto
protected int[] addPeriodInto(int[] values,
ReadablePeriod period)
Adds the fields from another period.
values
- the array of values to updateperiod
- the period to add from, not null
checkPeriodType
protected PeriodType checkPeriodType(PeriodType type)
Validates a period type, converting nulls to a default value and
checking the type is suitable for this instance.
type
- the type to check, may be null
- the validated type to use, not null
getValue
public int getValue(int index)
Gets the value at the specified index.
- getValue in interface ReadablePeriod
index
- the index to retrieve
- the value of the field at the specified index
mergePeriod
protected void mergePeriod(ReadablePeriod period)
Merges the fields from another period.
period
- the period to add from, not null
mergePeriodInto
protected int[] mergePeriodInto(int[] values,
ReadablePeriod period)
Merges the fields from another period.
values
- the array of values to updateperiod
- the period to add from, not null
setField
protected void setField(DurationFieldType field,
int value)
Sets the value of a field in this period.
field
- the field to setvalue
- the value to set
setFieldInto
protected void setFieldInto(int[] values,
DurationFieldType field,
int value)
Sets the value of a field in this period.
values
- the array of values to updatefield
- the field to setvalue
- the value to set
setPeriod
protected void setPeriod(int years,
int months,
int weeks,
int days,
int hours,
int minutes,
int seconds,
int millis)
Sets the eight standard the fields in one go.
years
- amount of years in this period, which must be zero if unsupportedmonths
- amount of months in this period, which must be zero if unsupportedweeks
- amount of weeks in this period, which must be zero if unsupporteddays
- amount of days in this period, which must be zero if unsupportedhours
- amount of hours in this period, which must be zero if unsupportedminutes
- amount of minutes in this period, which must be zero if unsupportedseconds
- amount of seconds in this period, which must be zero if unsupportedmillis
- amount of milliseconds in this period, which must be zero if unsupported
setPeriod
protected void setPeriod(ReadablePeriod period)
Sets all the fields of this period from another.
period
- the period to copy from, not null
setValue
protected void setValue(int index,
int value)
Sets the value of the field at the specifed index.
index
- the indexvalue
- the value to set
setValues
protected void setValues(int[] values)
Sets the values of all fields.
values
- the array of values
size
public int size()
Gets the number of fields that this period supports.
- size in interface ReadablePeriod
- the number of fields supported
toDurationFrom
public Duration toDurationFrom(ReadableInstant startInstant)
Gets the total millisecond duration of this period relative to a start instant.
This method adds the period to the specified instant in order to
calculate the duration.
An instant must be supplied as the duration of a period varies.
For example, a period of 1 month could vary between the equivalent of
28 and 31 days in milliseconds due to different length months.
Similarly, a day can vary at Daylight Savings cutover, typically between
23 and 25 hours.
startInstant
- the instant to add the period to, thus obtaining the duration
- the total length of the period as a duration relative to the start instant
toDurationTo
public Duration toDurationTo(ReadableInstant endInstant)
Gets the total millisecond duration of this period relative to an
end instant.
This method subtracts the period from the specified instant in order
to calculate the duration.
An instant must be supplied as the duration of a period varies.
For example, a period of 1 month could vary between the equivalent of
28 and 31 days in milliseconds due to different length months.
Similarly, a day can vary at Daylight Savings cutover, typically between
23 and 25 hours.
endInstant
- the instant to subtract the period from, thus obtaining the duration
- the total length of the period as a duration relative to the end instant