1 /* 2 * Copyright 2001-2005 Stephen Colebourne 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 package org.joda.time; 17 18 /** 19 * Defines an instant in the datetime continuum that can be queried and modified. 20 * This interface expresses the datetime as milliseconds from 1970-01-01T00:00:00Z. 21 * <p> 22 * The implementation of this interface will be mutable. 23 * It may provide more advanced methods than those in the interface. 24 * 25 * @author Stephen Colebourne 26 * @since 1.0 27 */ 28 public interface ReadWritableInstant extends ReadableInstant { 29 30 /** 31 * Sets the value as the number of milliseconds since 32 * the epoch, 1970-01-01T00:00:00Z. 33 * 34 * @param instant the milliseconds since 1970-01-01T00:00:00Z to set the 35 * instant to 36 * @throws IllegalArgumentException if the value is invalid 37 */ 38 void setMillis(long instant); 39 40 /** 41 * Sets the millisecond instant of this instant from another. 42 * <p> 43 * This method does not change the chronology of this instant, just the 44 * millisecond instant. 45 * 46 * @param instant the instant to use, null means now 47 */ 48 void setMillis(ReadableInstant instant); 49 50 /** 51 * Sets the chronology of the datetime, which has no effect if not applicable. 52 * 53 * @param chronology the chronology to use, null means ISOChronology in default zone 54 * @throws IllegalArgumentException if the value is invalid 55 */ 56 void setChronology(Chronology chronology); 57 58 /** 59 * Sets the time zone of the datetime, changing the chronology and field values. 60 * <p> 61 * Changing the zone using this method retains the millisecond instant. 62 * The millisecond instant is adjusted in the new zone to compensate. 63 * 64 * chronology. Setting the time zone does not affect the millisecond value 65 * of this instant. 66 * <p> 67 * If the chronology already has this time zone, no change occurs. 68 * 69 * @param zone the time zone to use, null means default zone 70 * @see #setZoneRetainFields 71 */ 72 void setZone(DateTimeZone zone); 73 74 /** 75 * Sets the time zone of the datetime, changing the chronology and millisecond. 76 * <p> 77 * Changing the zone using this method retains the field values. 78 * The millisecond instant is adjusted in the new zone to compensate. 79 * <p> 80 * If the chronology already has this time zone, no change occurs. 81 * 82 * @param zone the time zone to use, null means default zone 83 * @see #setZone 84 */ 85 void setZoneRetainFields(DateTimeZone zone); 86 87 //----------------------------------------------------------------------- 88 /** 89 * Adds a millisecond duration to this instant. 90 * <p> 91 * This will typically change the value of ost fields. 92 * 93 * @param duration the millis to add 94 * @throws IllegalArgumentException if the value is invalid 95 */ 96 void add(long duration); 97 98 /** 99 * Adds a duration to this instant. 100 * <p> 101 * This will typically change the value of most fields. 102 * 103 * @param duration the duration to add, null means add zero 104 * @throws ArithmeticException if the result exceeds the capacity of the instant 105 */ 106 void add(ReadableDuration duration); 107 108 /** 109 * Adds a duration to this instant specifying how many times to add. 110 * <p> 111 * This will typically change the value of most fields. 112 * 113 * @param duration the duration to add, null means add zero 114 * @param scalar direction and amount to add, which may be negative 115 * @throws ArithmeticException if the result exceeds the capacity of the instant 116 */ 117 void add(ReadableDuration duration, int scalar); 118 119 /** 120 * Adds a period to this instant. 121 * <p> 122 * This will typically change the value of most fields. 123 * 124 * @param period the period to add, null means add zero 125 * @throws ArithmeticException if the result exceeds the capacity of the instant 126 */ 127 void add(ReadablePeriod period); 128 129 /** 130 * Adds a period to this instant specifying how many times to add. 131 * <p> 132 * This will typically change the value of most fields. 133 * 134 * @param period the period to add, null means add zero 135 * @param scalar direction and amount to add, which may be negative 136 * @throws ArithmeticException if the result exceeds the capacity of the instant 137 */ 138 void add(ReadablePeriod period, int scalar); 139 140 //----------------------------------------------------------------------- 141 /** 142 * Sets the value of one of the fields of the instant, such as hourOfDay. 143 * 144 * @param type a field type, usually obtained from DateTimeFieldType, null ignored 145 * @param value the value to set the field to 146 * @throws IllegalArgumentException if the value is invalid 147 */ 148 void set(DateTimeFieldType type, int value); 149 150 /** 151 * Adds to the instant specifying the duration and multiple to add. 152 * 153 * @param type a field type, usually obtained from DateTimeFieldType, null ignored 154 * @param amount the amount to add of this duration 155 * @throws ArithmeticException if the result exceeds the capacity of the instant 156 */ 157 void add(DurationFieldType type, int amount); 158 159 }