Joda Time API

org.joda.time.chrono
Class RemainderDateTimeField

java.lang.Object
  |
  +--org.joda.time.DateTimeField
        |
        +--org.joda.time.chrono.RemainderDateTimeField
All Implemented Interfaces:
java.io.Serializable

public class RemainderDateTimeField
extends DateTimeField

Generic remainder datetime field.

Since:
1.0
Author:
Brian S O'Neill
See Also:
DividedDateTimeField, Serialized Form

Constructor Summary
RemainderDateTimeField(java.lang.String name, DateTimeField field, int unitDivisor)
          Constructor
 
Method Summary
 long add(long millis, int amount)
          Add the specified amount to the specified time instant.
 long add(long millis, long amount)
          Add the specified amount to the specified time instant.
 long addWrapped(long millis, int amount)
          Add the specified amount to the specified time instant, wrapping around within the remainder range if necessary.
 int get(long millis)
          Get the remainder from the specified time instant.
 long getDifference(long minuendMillis, long subtrahendMillis)
          Computes the difference between two instants, as measured in the units of this field.
 DateTimeField getField()
          Returns the DateTimeField being wrapped.
 int getMaximumValue()
          Get the maximum value for the field, which is always one less than the unit divisor.
 int getMinimumValue()
          Get the minimum value for the field, which is always zero.
 long getRangeMillis()
          Returns the wrapped field's unit size multiplied by the unit divisor.
 int getUnitDivisor()
          Returns the divisor to apply to the field in the field's units.
 long getUnitMillis()
          Returns the amount of milliseconds per unit value of this field.
 long remainder(long millis)
          Retains only the fractional units of this field.
 long roundCeiling(long millis)
          Round to the highest whole unit of this field.
 long roundFloor(long millis)
          Round to the lowest whole unit of this field.
 long set(long millis, int value)
          Set the specified amount of remainder units to the specified time instant.
 
Methods inherited from class org.joda.time.DateTimeField
addLong, getAsShortText, getAsShortText, getAsText, getAsText, getLeapAmount, getMaximumShortTextLength, getMaximumTextLength, getMaximumValue, getMinimumValue, getName, getWrappedValue, getWrappedValue, isLeap, roundHalfCeiling, roundHalfEven, roundHalfFloor, set, set, toString, verifyValueBounds
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Constructor Detail

RemainderDateTimeField

public RemainderDateTimeField(java.lang.String name,
                              DateTimeField field,
                              int unitDivisor)
Constructor

Parameters:
name - short, descriptive name, like "yearOfCentury".
field - the field to wrap, like "year()".
unitDivisor - divisor in units, such as 100 years in a century
Throws:
java.lang.IllegalArgumentException - if unit is less than two
Method Detail

get

public int get(long millis)
Get the remainder from the specified time instant.

Specified by:
get in class DateTimeField
Parameters:
millis - the time instant in millis to query.
Returns:
the remainder extracted from the input.

add

public long add(long millis,
                int amount)
Add the specified amount to the specified time instant. The amount added may be negative.

Specified by:
add in class DateTimeField
Parameters:
millis - the time instant in millis to update.
amount - the amount to add (can be negative).
Returns:
the updated time instant.

add

public long add(long millis,
                long amount)
Add the specified amount to the specified time instant. The amount added may be negative.

Specified by:
add in class DateTimeField
Parameters:
millis - the time instant in millis to update.
amount - the amount to add (can be negative).
Returns:
the updated time instant.
See Also:
DateTimeField.add(long,int)

addWrapped

public long addWrapped(long millis,
                       int amount)
Add the specified amount to the specified time instant, wrapping around within the remainder range if necessary. The amount added may be negative.

Overrides:
addWrapped in class DateTimeField
Parameters:
millis - the time instant in millis to update.
amount - the amount to add (can be negative).
Returns:
the updated time instant.

getDifference

public long getDifference(long minuendMillis,
                          long subtrahendMillis)
Description copied from class: DateTimeField
Computes the difference between two instants, as measured in the units of this field. Any fractional units are dropped from the result. Calling getDifference reverses the effect of calling add. In the following code:
 long millis = ...
 int v = ...
 long age = getDifference(add(millis, v), millis);
 
The value 'age' is the same as the value 'v'.

The default implementation performs a guess-and-check algorithm using the getUnitMillis and add methods. Subclasses are encouraged to provide a more efficient implementation.

Overrides:
getDifference in class DateTimeField
Parameters:
minuendMillis - the milliseconds from 1970-01-01T00:00:00Z to subtract from
subtrahendMillis - the milliseconds from 1970-01-01T00:00:00Z to subtract off the minuend
Returns:
the difference in the units of this field

set

public long set(long millis,
                int value)
Set the specified amount of remainder units to the specified time instant.

Specified by:
set in class DateTimeField
Parameters:
millis - the time instant in millis to update.
value - value of remainder units to set.
Returns:
the updated time instant.
Throws:
java.lang.IllegalArgumentException - if value is too large or too small.

getUnitMillis

public long getUnitMillis()
Description copied from class: DateTimeField
Returns the amount of milliseconds per unit value of this field. For example, if this field represents "hour of day", then the unit is the amount of milliseconds per one hour.

For fields with a variable unit size, this method returns a suitable average value.

Specified by:
getUnitMillis in class DateTimeField
Returns:
the unit size of this field, in milliseconds

getRangeMillis

public long getRangeMillis()
Returns the wrapped field's unit size multiplied by the unit divisor.

Specified by:
getRangeMillis in class DateTimeField
Returns:
the range of this field, in milliseconds

getMinimumValue

public int getMinimumValue()
Get the minimum value for the field, which is always zero.

Specified by:
getMinimumValue in class DateTimeField
Returns:
the minimum value of zero.

getMaximumValue

public int getMaximumValue()
Get the maximum value for the field, which is always one less than the unit divisor.

Specified by:
getMaximumValue in class DateTimeField
Returns:
the maximum value

roundFloor

public long roundFloor(long millis)
Description copied from class: DateTimeField
Round to the lowest whole unit of this field. After rounding, the value of this field and all fields of a higher magnitude are retained. The fractional millis that cannot be expressed in whole increments of this field are set to minimum.

For example, a datetime of 2002-11-02T23:34:56.789, rounded to the lowest whole hour is 2002-11-02T23:00:00.000.

Specified by:
roundFloor in class DateTimeField
Parameters:
millis - the milliseconds from 1970-01-01T00:00:00Z to round
Returns:
rounded milliseconds

roundCeiling

public long roundCeiling(long millis)
Description copied from class: DateTimeField
Round to the highest whole unit of this field. The value of this field and all fields of a higher magnitude may be incremented in order to achieve this result. The fractional millis that cannot be expressed in whole increments of this field are set to minimum.

For example, a datetime of 2002-11-02T23:34:56.789, rounded to the highest whole hour is 2002-11-03T00:00:00.000.

The default implementation calls roundFloor, and if the millis is modified as a result, adds one field unit. Subclasses are encouraged to provide a more efficient implementation.

Overrides:
roundCeiling in class DateTimeField
Parameters:
millis - the milliseconds from 1970-01-01T00:00:00Z to round
Returns:
rounded milliseconds

remainder

public long remainder(long millis)
Description copied from class: DateTimeField
Retains only the fractional units of this field. This field value and all fields of higher magnitude are reset. In other words, calling remainder retains the part of the instant that roundFloor dropped.

For example, a datetime of 2002-11-02T23:34:56.789, the remainder by hour is 1970-01-01T00:34:56.789.

The default implementation computes millis - roundFloor(millis). Subclasses are encouraged to provide a more efficient implementation.

Overrides:
remainder in class DateTimeField
Parameters:
millis - the milliseconds from 1970-01-01T00:00:00Z to get the remainder
Returns:
remainder milliseconds

getField

public DateTimeField getField()
Returns the DateTimeField being wrapped.

Returns:
field

getUnitDivisor

public int getUnitDivisor()
Returns the divisor to apply to the field in the field's units.

Returns:
the divisor

Joda Time API

Copyright © 2001-2003 Stephen Colebourne. All Rights Reserved.