KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > joda > time > ReadableInterval


1 /*
2  * Copyright 2001-2006 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  * Readable interface for an interval of time between two instants.
20  * <p>
21  * A time interval represents a period of time between two instants.
22  * Intervals are inclusive of the start instant and exclusive of the end.
23  * The end instant is always greater than or equal to the start instant.
24  * <p>
25  * Intervals have a fixed millisecond duration.
26  * This is the difference between the start and end instants.
27  * The duration is represented separately by {@link ReadableDuration}.
28  * As a result, intervals are not comparable.
29  * To compare the length of two intervals, you should compare their durations.
30  * <p>
31  * An interval can also be converted to a {@link ReadablePeriod}.
32  * This represents the difference between the start and end points in terms of fields
33  * such as years and days.
34  * <p>
35  * Methods that are passed an interval as a parameter will treat <code>null</code>
36  * as a zero length interval at the current instant in time.
37  *
38  * @author Sean Geoghegan
39  * @author Brian S O'Neill
40  * @author Stephen Colebourne
41  * @since 1.0
42  */

43 public interface ReadableInterval {
44
45     /**
46      * Gets the chronology of the interval, which is the chronology of the first datetime.
47      *
48      * @return the chronology of the interval
49      */

50     Chronology getChronology();
51
52     /**
53      * Gets the start of this time interval which is inclusive.
54      *
55      * @return the start of the time interval,
56      * millisecond instant from 1970-01-01T00:00:00Z
57      */

58     long getStartMillis();
59
60     /**
61      * Gets the start of this time interval, which is inclusive, as a DateTime.
62      *
63      * @return the start of the time interval
64      */

65     DateTime getStart();
66
67     /**
68      * Gets the end of this time interval which is exclusive.
69      *
70      * @return the end of the time interval,
71      * millisecond instant from 1970-01-01T00:00:00Z
72      */

73     long getEndMillis();
74
75     /**
76      * Gets the end of this time interval, which is exclusive, as a DateTime.
77      *
78      * @return the end of the time interval
79      */

80     DateTime getEnd();
81
82     //-----------------------------------------------------------------------
83
/**
84      * Does this time interval contain the specified instant.
85      * <p>
86      * Non-zero duration intervals are inclusive of the start instant and
87      * exclusive of the end. A zero duration interval cannot contain anything.
88      * <p>
89      * For example:
90      * <pre>
91      * [09:00 to 10:00) contains 08:59 = false (before start)
92      * [09:00 to 10:00) contains 09:00 = true
93      * [09:00 to 10:00) contains 09:59 = true
94      * [09:00 to 10:00) contains 10:00 = false (equals end)
95      * [09:00 to 10:00) contains 10:01 = false (after end)
96      *
97      * [14:00 to 14:00) contains 14:00 = false (zero duration contains nothing)
98      * </pre>
99      *
100      * @param instant the instant, null means now
101      * @return true if this time interval contains the instant
102      */

103     boolean contains(ReadableInstant instant);
104     
105     /**
106      * Does this time interval contain the specified time interval.
107      * <p>
108      * Non-zero duration intervals are inclusive of the start instant and
109      * exclusive of the end. The other interval is contained if this interval
110      * wholly contains, starts, finishes or equals it.
111      * A zero duration interval cannot contain anything.
112      * <p>
113      * When two intervals are compared the result is one of three states:
114      * (a) they abut, (b) there is a gap between them, (c) they overlap.
115      * The <code>contains</code> method is not related to these states.
116      * In particular, a zero duration interval is contained at the start of
117      * a larger interval, but does not overlap (it abuts instead).
118      * <p>
119      * For example:
120      * <pre>
121      * [09:00 to 10:00) contains [09:00 to 10:00) = true
122      * [09:00 to 10:00) contains [09:00 to 09:30) = true
123      * [09:00 to 10:00) contains [09:30 to 10:00) = true
124      * [09:00 to 10:00) contains [09:15 to 09:45) = true
125      * [09:00 to 10:00) contains [09:00 to 09:00) = true
126      *
127      * [09:00 to 10:00) contains [08:59 to 10:00) = false (otherStart before thisStart)
128      * [09:00 to 10:00) contains [09:00 to 10:01) = false (otherEnd after thisEnd)
129      * [09:00 to 10:00) contains [10:00 to 10:00) = false (otherStart equals thisEnd)
130      *
131      * [14:00 to 14:00) contains [14:00 to 14:00) = false (zero duration contains nothing)
132      * </pre>
133      *
134      * @param interval the time interval to compare to, null means a zero duration interval now
135      * @return true if this time interval contains the time interval
136      */

137     boolean contains(ReadableInterval interval);
138     
139     /**
140      * Does this time interval overlap the specified time interval.
141      * <p>
142      * Intervals are inclusive of the start instant and exclusive of the end.
143      * An interval overlaps another if it shares some common part of the
144      * datetime continuum.
145      * <p>
146      * When two intervals are compared the result is one of three states:
147      * (a) they abut, (b) there is a gap between them, (c) they overlap.
148      * The abuts state takes precedence over the other two, thus a zero duration
149      * interval at the start of a larger interval abuts and does not overlap.
150      * <p>
151      * For example:
152      * <pre>
153      * [09:00 to 10:00) overlaps [08:00 to 08:30) = false (completely before)
154      * [09:00 to 10:00) overlaps [08:00 to 09:00) = false (abuts before)
155      * [09:00 to 10:00) overlaps [08:00 to 09:30) = true
156      * [09:00 to 10:00) overlaps [08:00 to 10:00) = true
157      * [09:00 to 10:00) overlaps [08:00 to 11:00) = true
158      *
159      * [09:00 to 10:00) overlaps [09:00 to 09:00) = false (abuts before)
160      * [09:00 to 10:00) overlaps [09:00 to 09:30) = true
161      * [09:00 to 10:00) overlaps [09:00 to 10:00) = true
162      * [09:00 to 10:00) overlaps [09:00 to 11:00) = true
163      *
164      * [09:00 to 10:00) overlaps [09:30 to 09:30) = true
165      * [09:00 to 10:00) overlaps [09:30 to 10:00) = true
166      * [09:00 to 10:00) overlaps [09:30 to 11:00) = true
167      *
168      * [09:00 to 10:00) overlaps [10:00 to 10:00) = false (abuts after)
169      * [09:00 to 10:00) overlaps [10:00 to 11:00) = false (abuts after)
170      *
171      * [09:00 to 10:00) overlaps [10:30 to 11:00) = false (completely after)
172      *
173      * [14:00 to 14:00) overlaps [14:00 to 14:00) = false (abuts before and after)
174      * [14:00 to 14:00) overlaps [13:00 to 15:00) = true
175      * </pre>
176      *
177      * @param interval the time interval to compare to, null means a zero length interval now
178      * @return true if the time intervals overlap
179      */

180     boolean overlaps(ReadableInterval interval);
181     
182     //-----------------------------------------------------------------------
183
/**
184      * Is this time interval after the specified instant.
185      * <p>
186      * Intervals are inclusive of the start instant and exclusive of the end.
187      *
188      * @param instant the instant to compare to, null means now
189      * @return true if this time interval is after the instant
190      */

191     boolean isAfter(ReadableInstant instant);
192     
193     /**
194      * Is this time interval entirely after the specified interval.
195      * <p>
196      * Intervals are inclusive of the start instant and exclusive of the end.
197      *
198      * @param interval the interval to compare to, null means now
199      * @return true if this time interval is after the interval specified
200      */

201     boolean isAfter(ReadableInterval interval);
202     
203     /**
204      * Is this time interval before the specified instant.
205      * <p>
206      * Intervals are inclusive of the start instant and exclusive of the end.
207      *
208      * @param instant the instant to compare to, null means now
209      * @return true if this time interval is before the instant
210      */

211     boolean isBefore(ReadableInstant instant);
212     
213     /**
214      * Is this time interval entirely before the specified interval.
215      * <p>
216      * Intervals are inclusive of the start instant and exclusive of the end.
217      *
218      * @param interval the interval to compare to, null means now
219      * @return true if this time interval is before the interval specified
220      */

221     boolean isBefore(ReadableInterval interval);
222     
223     //-----------------------------------------------------------------------
224
/**
225      * Get this interval as an immutable <code>Interval</code> object.
226      * <p>
227      * This will either typecast this instance, or create a new <code>Interval</code>.
228      *
229      * @return the interval as an Interval object
230      */

231     Interval toInterval();
232
233     /**
234      * Get this time interval as a <code>MutableInterval</code>.
235      * <p>
236      * This will always return a new <code>MutableInterval</code> with the same interval.
237      *
238      * @return the time interval as a MutableInterval object
239      */

240     MutableInterval toMutableInterval();
241
242     //-----------------------------------------------------------------------
243
/**
244      * Gets the millisecond duration of this time interval.
245      *
246      * @return the millisecond duration of the time interval
247      * @throws ArithmeticException if the duration exceeds the capacity of a long
248      */

249     Duration toDuration();
250
251     /**
252      * Gets the millisecond duration of this time interval.
253      *
254      * @return the millisecond duration of the time interval
255      * @throws ArithmeticException if the duration exceeds the capacity of a long
256      */

257     long toDurationMillis();
258
259     /**
260      * Converts the duration of the interval to a period using the
261      * standard period type.
262      * <p>
263      * This method should be used to exract the field values describing the
264      * difference between the start and end instants.
265      *
266      * @return a time period derived from the interval
267      */

268     Period toPeriod();
269
270     /**
271      * Converts the duration of the interval to a period using the
272      * specified period type.
273      * <p>
274      * This method should be used to exract the field values describing the
275      * difference between the start and end instants.
276      *
277      * @param type the requested type of the duration, null means standard
278      * @return a time period derived from the interval
279      */

280     Period toPeriod(PeriodType type);
281
282     //-----------------------------------------------------------------------
283
/**
284      * Compares this object with the specified object for equality based
285      * on start and end millis plus the chronology.
286      * All ReadableInterval instances are accepted.
287      * <p>
288      * To compare the duration of two time intervals, use {@link #toDuration()}
289      * to get the durations and compare those.
290      *
291      * @param readableInterval a readable interval to check against
292      * @return true if the start and end millis are equal
293      */

294     boolean equals(Object JavaDoc readableInterval);
295
296     /**
297      * Gets a hash code for the time interval that is compatable with the
298      * equals method.
299      * <p>
300      * The formula used must be as follows:
301      * <pre>int result = 97;
302      * result = 31 * result + ((int) (getStartMillis() ^ (getStartMillis() >>> 32)));
303      * result = 31 * result + ((int) (getEndMillis() ^ (getEndMillis() >>> 32)));
304      * result = 31 * result + getChronology().hashCode();
305      * return result;</pre>
306      *
307      * @return a hash code
308      */

309     int hashCode();
310
311     //-----------------------------------------------------------------------
312
/**
313      * Get the value as a String in the ISO8601 interval format.
314      * <p>
315      * For example, "2004-06-09T12:30:00.000/2004-07-10T13:30:00.000".
316      *
317      * @return the value as an ISO8601 string
318      */

319     String JavaDoc toString();
320
321 }
322
Popular Tags