/* * Joda Software License, Version 1.0 * * * Copyright (c) 2001-2004 Stephen Colebourne. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The end-user documentation included with the redistribution, * if any, must include the following acknowledgment: * "This product includes software developed by the * Joda project (http://www.joda.org/)." * Alternately, this acknowledgment may appear in the software itself, * if and wherever such third-party acknowledgments normally appear. * * 4. The name "Joda" must not be used to endorse or promote products * derived from this software without prior written permission. For * written permission, please contact licence@joda.org. * * 5. Products derived from this software may not be called "Joda", * nor may "Joda" appear in their name, without prior written * permission of the Joda project. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE JODA AUTHORS OR THE PROJECT * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * ==================================================================== * * This software consists of voluntary contributions made by many * individuals on behalf of the Joda project and was originally * created by Stephen Colebourne . For more * information on the Joda project, please see . */ package org.joda.time; /** * Defines an instant in the datetime continuum that can be queried and modified. * This interface expresses the datetime as milliseconds from 1970-01-01T00:00:00Z. *

* The implementation of this interface will be mutable. * It may provide more advanced methods than those in the interface. * * @author Stephen Colebourne * @since 1.0 */ public interface ReadWritableInstant extends ReadableInstant { /** * Sets the value as the number of milliseconds since * the epoch, 1970-01-01T00:00:00Z. * * @param instant the milliseconds since 1970-01-01T00:00:00Z to set the * instant to * @throws IllegalArgumentException if the value is invalid */ void setMillis(long instant); /** * Sets the millisecond instant of this instant from another. *

* This method does not change the chronology of this instant, just the * millisecond instant. * * @param instant the instant to use, null means now */ void setMillis(ReadableInstant instant); /** * Sets the chronology of the datetime, which has no effect if not applicable. * * @param chronology the chronology to use, null means ISOChronology in default zone * @throws IllegalArgumentException if the value is invalid */ void setChronology(Chronology chronology); /** * Sets the time zone of the datetime, changing the chronology and field values. *

* Changing the zone using this method retains the millisecond instant. * The millisecond instant is adjusted in the new zone to compensate. * * chronology. Setting the time zone does not affect the millisecond value * of this instant. *

* If the chronology already has this time zone, no change occurs. * * @param zone the time zone to use, null means default zone * @see #setZoneRetainFields */ void setZone(DateTimeZone zone); /** * Sets the time zone of the datetime, changing the chronology and millisecond. *

* Changing the zone using this method retains the field values. * The millisecond instant is adjusted in the new zone to compensate. *

* If the chronology already has this time zone, no change occurs. * * @param zone the time zone to use, null means default zone * @see #setZone */ void setZoneRetainFields(DateTimeZone zone); //----------------------------------------------------------------------- /** * Adds a millisecond duration to this instant. *

* This will typically change the value of ost fields. * * @param duration the millis to add * @throws IllegalArgumentException if the value is invalid */ void add(long duration); /** * Adds a duration to this instant. *

* This will typically change the value of most fields. * * @param duration the duration to add, null means add zero * @throws ArithmeticException if the result exceeds the capacity of the instant */ void add(ReadableDuration duration); /** * Adds a duration to this instant specifying how many times to add. *

* This will typically change the value of most fields. * * @param duration the duration to add, null means add zero * @param scalar direction and amount to add, which may be negative * @throws ArithmeticException if the result exceeds the capacity of the instant */ void add(ReadableDuration duration, int scalar); /** * Adds a period to this instant. *

* This will typically change the value of most fields. * * @param period the period to add, null means add zero * @throws ArithmeticException if the result exceeds the capacity of the instant */ void add(ReadablePeriod period); /** * Adds a period to this instant specifying how many times to add. *

* This will typically change the value of most fields. * * @param period the period to add, null means add zero * @param scalar direction and amount to add, which may be negative * @throws ArithmeticException if the result exceeds the capacity of the instant */ void add(ReadablePeriod period, int scalar); //----------------------------------------------------------------------- /** * Sets the value of one of the fields of the instant, such as hourOfDay. * * @param type a field type, usually obtained from DateTimeFieldType, null ignored * @param value the value to set the field to * @throws IllegalArgumentException if the value is invalid */ void set(DateTimeFieldType type, int value); /** * Adds to the instant specifying the duration and multiple to add. * * @param type a field type, usually obtained from DateTimeFieldType, null ignored * @param amount the amount to add of this duration * @throws ArithmeticException if the result exceeds the capacity of the instant */ void add(DurationFieldType type, int amount); }