EMMA Coverage Report (generated Tue Oct 28 00:01:11 GMT 2008)
[all classes][org.joda.time]

COVERAGE SUMMARY FOR SOURCE FILE [DateTimeField.java]

nameclass, %method, %block, %line, %
DateTimeField.java100% (1/1)100% (1/1)100% (3/3)100% (1/1)

COVERAGE BREAKDOWN BY CLASS AND METHOD

nameclass, %method, %block, %line, %
     
class DateTimeField100% (1/1)100% (1/1)100% (3/3)100% (1/1)
DateTimeField (): void 100% (1/1)100% (3/3)100% (1/1)

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 */
16package org.joda.time;
17 
18import java.util.Locale;
19 
20/**
21 * Defines the calculation engine for date and time fields.
22 * The interface defines a set of methods that manipulate a millisecond datetime
23 * with regards to a single field, such as monthOfYear or secondOfMinute.
24 * <p>
25 * This design is extensible so, if you wish, you can extract a different field from
26 * the milliseconds. A number of standard implementations are provided to assist.
27 *
28 * @author Guy Allard
29 * @author Stephen Colebourne
30 * @author Brian S O'Neill
31 * @since 1.0
32 */
33public abstract class DateTimeField {
34 
35    /**
36     * Get the type of the field.
37     * 
38     * @return field type
39     */
40    public abstract DateTimeFieldType getType();
41 
42    /**
43     * Get the name of the field.
44     * <p>
45     * By convention, names follow a pattern of "dddOfRrr", where "ddd" represents
46     * the (singular) duration unit field name and "Rrr" represents the (singular)
47     * duration range field name. If the range field is not applicable, then
48     * the name of the field is simply the (singular) duration field name.
49     * 
50     * @return field name
51     */
52    public abstract String getName();
53 
54    /**
55     * Returns true if this field is supported.
56     * 
57     * @return true if this field is supported
58     */
59    public abstract boolean isSupported();
60 
61    /**
62     * Returns true if the set method is lenient. If so, it accepts values that
63     * are out of bounds. For example, a lenient day of month field accepts 32
64     * for January, converting it to February 1.
65     * 
66     * @return true if this field is lenient
67     */
68    public abstract boolean isLenient();
69 
70    // Main access API
71    //------------------------------------------------------------------------
72    /**
73     * Get the value of this field from the milliseconds.
74     * 
75     * @param instant  the milliseconds from 1970-01-01T00:00:00Z to query
76     * @return the value of the field, in the units of the field
77     */
78    public abstract int get(long instant);
79 
80    /**
81     * Get the human-readable, text value of this field from the milliseconds.
82     * If the specified locale is null, the default locale is used.
83     *
84     * @param instant  the milliseconds from 1970-01-01T00:00:00Z to query
85     * @param locale the locale to use for selecting a text symbol, null for default
86     * @return the text value of the field
87     */
88    public abstract String getAsText(long instant, Locale locale);
89 
90    /**
91     * Get the human-readable, text value of this field from the milliseconds.
92     * 
93     * @param instant  the milliseconds from 1970-01-01T00:00:00Z to query
94     * @return the text value of the field
95     */
96    public abstract String getAsText(long instant);
97 
98    /**
99     * Get the human-readable, text value of this field from a partial instant.
100     * If the specified locale is null, the default locale is used.
101     *
102     * @param partial  the partial instant to query
103     * @param fieldValue  the field value of this field, provided for performance
104     * @param locale  the locale to use for selecting a text symbol, null for default
105     * @return the text value of the field
106     */
107    public abstract String getAsText(ReadablePartial partial, int fieldValue, Locale locale);
108 
109    /**
110     * Get the human-readable, text value of this field from a partial instant.
111     * If the specified locale is null, the default locale is used.
112     *
113     * @param partial  the partial instant to query
114     * @param locale  the locale to use for selecting a text symbol, null for default
115     * @return the text value of the field
116     */
117    public abstract String getAsText(ReadablePartial partial, Locale locale);
118 
119    /**
120     * Get the human-readable, text value of this field from the field value.
121     * If the specified locale is null, the default locale is used.
122     *
123     * @param fieldValue  the numeric value to convert to text
124     * @param locale the locale to use for selecting a text symbol, null for default
125     * @return the text value of the field
126     */
127    public abstract String getAsText(int fieldValue, Locale locale);
128 
129    /**
130     * Get the human-readable, short text value of this field from the
131     * milliseconds.  If the specified locale is null, the default locale is used.
132     *
133     * @param instant  the milliseconds from 1970-01-01T00:00:00Z to query
134     * @param locale the locale to use for selecting a text symbol, null for default
135     * @return the short text value of the field
136     */
137    public abstract String getAsShortText(long instant, Locale locale);
138 
139    /**
140     * Get the human-readable, short text value of this field from the
141     * milliseconds.
142     * 
143     * @param instant  the milliseconds from 1970-01-01T00:00:00Z to query
144     * @return the short text value of the field
145     */
146    public abstract String getAsShortText(long instant);
147 
148    /**
149     * Get the human-readable, short text value of this field from a partial instant.
150     * If the specified locale is null, the default locale is used.
151     *
152     * @param partial  the partial instant to query
153     * @param fieldValue  the field value of this field, provided for performance
154     * @param locale  the locale to use for selecting a text symbol, null for default
155     * @return the text value of the field
156     */
157    public abstract String getAsShortText(ReadablePartial partial, int fieldValue, Locale locale);
158 
159    /**
160     * Get the human-readable, short text value of this field from a partial instant.
161     * If the specified locale is null, the default locale is used.
162     *
163     * @param partial  the partial instant to query
164     * @param locale  the locale to use for selecting a text symbol, null for default
165     * @return the text value of the field
166     */
167    public abstract String getAsShortText(ReadablePartial partial, Locale locale);
168 
169    /**
170     * Get the human-readable, short text value of this field from the field value.
171     * If the specified locale is null, the default locale is used.
172     *
173     * @param fieldValue  the numeric value to convert to text
174     * @param locale the locale to use for selecting a text symbol, null for default
175     * @return the text value of the field
176     */
177    public abstract String getAsShortText(int fieldValue, Locale locale);
178 
179    /**
180     * Adds a value (which may be negative) to the millis value,
181     * overflowing into larger fields if necessary.
182     * <p>
183     * The value will be added to this field. If the value is too large to be
184     * added solely to this field, larger fields will increase as required.
185     * Smaller fields should be unaffected, except where the result would be
186     * an invalid value for a smaller field. In this case the smaller field is
187     * adjusted to be in range.
188     * <p>
189     * For example, in the ISO chronology:<br>
190     * 2000-08-20 add six months is 2001-02-20<br>
191     * 2000-08-20 add twenty months is 2002-04-20<br>
192     * 2000-08-20 add minus nine months is 1999-11-20<br>
193     * 2001-01-31 add one month  is 2001-02-28<br>
194     * 2001-01-31 add two months is 2001-03-31<br>
195     * 
196     * @param instant  the milliseconds from 1970-01-01T00:00:00Z to add to
197     * @param value  the value to add, in the units of the field
198     * @return the updated milliseconds
199     */
200    public abstract long add(long instant, int value);
201 
202    /**
203     * Adds a value (which may be negative) to the millis value,
204     * overflowing into larger fields if necessary.
205     * 
206     * @param instant  the milliseconds from 1970-01-01T00:00:00Z to add to
207     * @param value  the long value to add, in the units of the field
208     * @return the updated milliseconds
209     * @throws IllegalArgumentException if value is too large
210     * @see #add(long,int)
211     */
212    public abstract long add(long instant, long value);
213 
214    /**
215     * Adds a value (which may be negative) to the partial instant,
216     * throwing an exception if the maximum size of the instant is reached.
217     * <p>
218     * The value will be added to this field, overflowing into larger fields
219     * if necessary. Smaller fields should be unaffected, except where the
220     * result would be an invalid value for a smaller field. In this case the
221     * smaller field is adjusted to be in range.
222     * <p>
223     * Partial instants only contain some fields. This may result in a maximum
224     * possible value, such as TimeOfDay being limited to 23:59:59:999. If this
225     * limit is breached by the add an exception is thrown.
226     * <p>
227     * For example, in the ISO chronology:<br>
228     * 2000-08-20 add six months is 2000-02-20<br>
229     * 2000-08-20 add twenty months is 2000-04-20<br>
230     * 2000-08-20 add minus nine months is 2000-11-20<br>
231     * 2001-01-31 add one month  is 2001-02-28<br>
232     * 2001-01-31 add two months is 2001-03-31<br>
233     * 
234     * @param instant  the partial instant
235     * @param fieldIndex  the index of this field in the instant
236     * @param values  the values of the partial instant which should be updated
237     * @param valueToAdd  the value to add, in the units of the field
238     * @return the passed in values
239     * @throws IllegalArgumentException if the value is invalid or the maximum instant is reached
240     */
241    public abstract int[] add(ReadablePartial instant, int fieldIndex, int[] values, int valueToAdd);
242 
243    /**
244     * Adds a value (which may be negative) to the partial instant,
245     * wrapping the whole partial if the maximum size of the partial is reached.
246     * <p>
247     * The value will be added to this field, overflowing into larger fields
248     * if necessary. Smaller fields should be unaffected, except where the
249     * result would be an invalid value for a smaller field. In this case the
250     * smaller field is adjusted to be in range.
251     * <p>
252     * Partial instants only contain some fields. This may result in a maximum
253     * possible value, such as TimeOfDay normally being limited to 23:59:59:999.
254     * If ths limit is reached by the addition, this method will wrap back to
255     * 00:00:00.000. In fact, you would generally only use this method for
256     * classes that have a limitation such as this.
257     * <p>
258     * For example, in the ISO chronology:<br>
259     * 10:20:30 add 20 minutes is 10:40:30<br>
260     * 10:20:30 add 45 minutes is 11:05:30<br>
261     * 10:20:30 add 16 hours is 02:20:30<br>
262     * 
263     * @param instant  the partial instant
264     * @param fieldIndex  the index of this field in the partial
265     * @param values  the values of the partial instant which should be updated
266     * @param valueToAdd  the value to add, in the units of the field
267     * @return the passed in values
268     * @throws IllegalArgumentException if the value is invalid or the maximum instant is reached
269     */
270    public abstract int[] addWrapPartial(ReadablePartial instant, int fieldIndex, int[] values, int valueToAdd);
271 
272    /**
273     * Adds a value (which may be negative) to the millis value,
274     * wrapping within this field.
275     * <p>
276     * The value will be added to this field. If the value is too large to be
277     * added solely to this field then it wraps. Larger fields are always
278     * unaffected. Smaller fields should be unaffected, except where the
279     * result would be an invalid value for a smaller field. In this case the
280     * smaller field is adjusted to be in range.
281     * <p>
282     * For example, in the ISO chronology:<br>
283     * 2000-08-20 addWrapField six months is 2000-02-20<br>
284     * 2000-08-20 addWrapField twenty months is 2000-04-20<br>
285     * 2000-08-20 addWrapField minus nine months is 2000-11-20<br>
286     * 2001-01-31 addWrapField one month  is 2001-02-28<br>
287     * 2001-01-31 addWrapField two months is 2001-03-31<br>
288     * 
289     * @param instant  the milliseconds from 1970-01-01T00:00:00Z to add to
290     * @param value  the value to add, in the units of the field
291     * @return the updated milliseconds
292     */
293    public abstract long addWrapField(long instant, int value) ;
294 
295    /**
296     * Adds a value (which may be negative) to the partial instant,
297     * wrapping within this field.
298     * <p>
299     * The value will be added to this field. If the value is too large to be
300     * added solely to this field then it wraps. Larger fields are always
301     * unaffected. Smaller fields should be unaffected, except where the
302     * result would be an invalid value for a smaller field. In this case the
303     * smaller field is adjusted to be in range.
304     * <p>
305     * For example, in the ISO chronology:<br>
306     * 2000-08-20 addWrapField six months is 2000-02-20<br>
307     * 2000-08-20 addWrapField twenty months is 2000-04-20<br>
308     * 2000-08-20 addWrapField minus nine months is 2000-11-20<br>
309     * 2001-01-31 addWrapField one month  is 2001-02-28<br>
310     * 2001-01-31 addWrapField two months is 2001-03-31<br>
311     * 
312     * @param instant  the partial instant
313     * @param fieldIndex  the index of this field in the instant
314     * @param values  the values of the partial instant which should be updated
315     * @param valueToAdd  the value to add, in the units of the field
316     * @return the passed in values
317     * @throws IllegalArgumentException if the value is invalid
318     */
319    public abstract int[] addWrapField(ReadablePartial instant, int fieldIndex, int[] values, int valueToAdd);
320 
321    /**
322     * Computes the difference between two instants, as measured in the units
323     * of this field. Any fractional units are dropped from the result. Calling
324     * getDifference reverses the effect of calling add. In the following code:
325     *
326     * <pre>
327     * long instant = ...
328     * int v = ...
329     * int age = getDifference(add(instant, v), instant);
330     * </pre>
331     *
332     * The value 'age' is the same as the value 'v'.
333     *
334     * @param minuendInstant the milliseconds from 1970-01-01T00:00:00Z to
335     * subtract from
336     * @param subtrahendInstant the milliseconds from 1970-01-01T00:00:00Z to
337     * subtract off the minuend
338     * @return the difference in the units of this field
339     */
340    public abstract int getDifference(long minuendInstant, long subtrahendInstant);
341 
342    /**
343     * Computes the difference between two instants, as measured in the units
344     * of this field. Any fractional units are dropped from the result. Calling
345     * getDifference reverses the effect of calling add. In the following code:
346     *
347     * <pre>
348     * long instant = ...
349     * long v = ...
350     * long age = getDifferenceAsLong(add(instant, v), instant);
351     * </pre>
352     *
353     * The value 'age' is the same as the value 'v'.
354     *
355     * @param minuendInstant the milliseconds from 1970-01-01T00:00:00Z to
356     * subtract from
357     * @param subtrahendInstant the milliseconds from 1970-01-01T00:00:00Z to
358     * subtract off the minuend
359     * @return the difference in the units of this field
360     */
361    public abstract long getDifferenceAsLong(long minuendInstant, long subtrahendInstant);
362 
363    /**
364     * Sets a value in the milliseconds supplied.
365     * <p>
366     * The value of this field will be set.
367     * If the value is invalid, an exception if thrown.
368     * <p>
369     * If setting this field would make other fields invalid, then those fields
370     * may be changed. For example if the current date is the 31st January, and
371     * the month is set to February, the day would be invalid. Instead, the day
372     * would be changed to the closest value - the 28th/29th February as appropriate.
373     * 
374     * @param instant  the milliseconds from 1970-01-01T00:00:00Z to set in
375     * @param value  the value to set, in the units of the field
376     * @return the updated milliseconds
377     * @throws IllegalArgumentException if the value is invalid
378     */
379    public abstract long set(long instant, int value);
380 
381    /**
382     * Sets a value using the specified partial instant.
383     * <p>
384     * The value of this field (specified by the index) will be set.
385     * If the value is invalid, an exception if thrown.
386     * <p>
387     * If setting this field would make other fields invalid, then those fields
388     * may be changed. For example if the current date is the 31st January, and
389     * the month is set to February, the day would be invalid. Instead, the day
390     * would be changed to the closest value - the 28th/29th February as appropriate.
391     * 
392     * @param instant  the partial instant
393     * @param fieldIndex  the index of this field in the instant
394     * @param values  the values of the partial instant which should be updated
395     * @param newValue  the value to set, in the units of the field
396     * @return the passed in values
397     * @throws IllegalArgumentException if the value is invalid
398     */
399    public abstract int[] set(ReadablePartial instant, int fieldIndex, int[] values, int newValue);
400 
401    /**
402     * Sets a value in the milliseconds supplied from a human-readable, text value.
403     * If the specified locale is null, the default locale is used.
404     * <p>
405     * If setting this field would make other fields invalid, then those fields
406     * may be changed. For example if the current date is the 31st January, and
407     * the month is set to February, the day would be invalid. Instead, the day
408     * would be changed to the closest value - the 28th/29th February as appropriate.
409     *
410     * @param instant  the milliseconds from 1970-01-01T00:00:00Z to set in
411     * @param text  the text value to set
412     * @param locale the locale to use for selecting a text symbol, null for default
413     * @return the updated milliseconds
414     * @throws IllegalArgumentException if the text value is invalid
415     */
416    public abstract long set(long instant, String text, Locale locale);
417 
418    /**
419     * Sets a value in the milliseconds supplied from a human-readable, text value.
420     * <p>
421     * If setting this field would make other fields invalid, then those fields
422     * may be changed. For example if the current date is the 31st January, and
423     * the month is set to February, the day would be invalid. Instead, the day
424     * would be changed to the closest value - the 28th/29th February as appropriate.
425     * 
426     * @param instant  the milliseconds from 1970-01-01T00:00:00Z to set in
427     * @param text  the text value to set
428     * @return the updated milliseconds
429     * @throws IllegalArgumentException if the text value is invalid
430     */
431    public abstract long set(long instant, String text);
432 
433    /**
434     * Sets a value in the milliseconds supplied from a human-readable, text value.
435     * If the specified locale is null, the default locale is used.
436     * <p>
437     * If setting this field would make other fields invalid, then those fields
438     * may be changed. For example if the current date is the 31st January, and
439     * the month is set to February, the day would be invalid. Instead, the day
440     * would be changed to the closest value - the 28th/29th February as appropriate.
441     *
442     * @param instant  the partial instant
443     * @param fieldIndex  the index of this field in the instant
444     * @param values  the values of the partial instant which should be updated
445     * @param text  the text value to set
446     * @param locale the locale to use for selecting a text symbol, null for default
447     * @return the passed in values
448     * @throws IllegalArgumentException if the text value is invalid
449     */
450    public abstract int[] set(ReadablePartial instant, int fieldIndex, int[] values, String text, Locale locale);
451 
452    // Extra information API
453    //------------------------------------------------------------------------
454    /**
455     * Returns the duration per unit value of this field. For example, if this
456     * field represents "hour of day", then the duration is an hour.
457     *
458     * @return the duration of this field, or UnsupportedDurationField if field
459     * has no duration
460     */
461    public abstract DurationField getDurationField();
462 
463    /**
464     * Returns the range duration of this field. For example, if this field
465     * represents "hour of day", then the range duration is a day.
466     *
467     * @return the range duration of this field, or null if field has no range
468     */
469    public abstract DurationField getRangeDurationField();
470 
471    /**
472     * Returns whether this field is 'leap' for the specified instant.
473     * <p>
474     * For example, a leap year would return true, a non leap year would return
475     * false.
476     * 
477     * @param instant  the instant to check for leap status
478     * @return true if the field is 'leap'
479     */
480    public abstract boolean isLeap(long instant);
481 
482    /**
483     * Gets the amount by which this field is 'leap' for the specified instant.
484     * <p>
485     * For example, a leap year would return one, a non leap year would return
486     * zero.
487     * 
488     * @param instant  the instant to check for leap status
489     * @return the amount, in units of the leap duration field, that the field is leap
490     */
491    public abstract int getLeapAmount(long instant);
492 
493    /**
494     * If this field were to leap, then it would be in units described by the
495     * returned duration. If this field doesn't ever leap, null is returned.
496     * 
497     * @return the leap duration field if field can be leap, null if it can't
498     */
499    public abstract DurationField getLeapDurationField();
500 
501    /**
502     * Get the minimum allowable value for this field.
503     * 
504     * @return the minimum valid value for this field, in the units of the
505     * field
506     */
507    public abstract int getMinimumValue();
508 
509    /**
510     * Get the minimum value for this field evaluated at the specified time.
511     * 
512     * @param instant  the milliseconds from 1970-01-01T00:00:00Z to query
513     * @return the minimum value for this field, in the units of the field
514     */
515    public abstract int getMinimumValue(long instant);
516 
517    /**
518     * Get the minimum value for this field evaluated at the specified time.
519     * 
520     * @param instant  the partial instant to query
521     * @return the minimum value for this field, in the units of the field
522     */
523    public abstract int getMinimumValue(ReadablePartial instant);
524 
525    /**
526     * Get the minimum value for this field using the partial instant and
527     * the specified values.
528     * 
529     * @param instant  the partial instant to query
530     * @param values  the values to use
531     * @return the minimum value for this field, in the units of the field
532     */
533    public abstract int getMinimumValue(ReadablePartial instant, int[] values);
534 
535    /**
536     * Get the maximum allowable value for this field.
537     * 
538     * @return the maximum valid value for this field, in the units of the
539     * field
540     */
541    public abstract int getMaximumValue();
542 
543    /**
544     * Get the maximum value for this field evaluated at the specified time.
545     * 
546     * @param instant  the milliseconds from 1970-01-01T00:00:00Z to query
547     * @return the maximum value for this field, in the units of the field
548     */
549    public abstract int getMaximumValue(long instant);
550 
551    /**
552     * Get the maximum value for this field evaluated at the specified time.
553     * 
554     * @param instant  the partial instant to query
555     * @return the maximum value for this field, in the units of the field
556     */
557    public abstract int getMaximumValue(ReadablePartial instant);
558 
559    /**
560     * Get the maximum value for this field using the partial instant and
561     * the specified values.
562     * 
563     * @param instant  the partial instant to query
564     * @param values  the values to use
565     * @return the maximum value for this field, in the units of the field
566     */
567    public abstract int getMaximumValue(ReadablePartial instant, int[] values);
568 
569    /**
570     * Get the maximum text value for this field.
571     * 
572     * @param locale  the locale to use for selecting a text symbol
573     * @return the maximum text length
574     */
575    public abstract int getMaximumTextLength(Locale locale);
576 
577    /**
578     * Get the maximum short text value for this field.
579     * 
580     * @param locale  the locale to use for selecting a text symbol
581     * @return the maximum short text length
582     */
583    public abstract int getMaximumShortTextLength(Locale locale);
584 
585    // Calculation API
586    //------------------------------------------------------------------------
587    /**
588     * Round to the lowest whole unit of this field. After rounding, the value
589     * of this field and all fields of a higher magnitude are retained. The
590     * fractional millis that cannot be expressed in whole increments of this
591     * field are set to minimum.
592     * <p>
593     * For example, a datetime of 2002-11-02T23:34:56.789, rounded to the
594     * lowest whole hour is 2002-11-02T23:00:00.000.
595     *
596     * @param instant  the milliseconds from 1970-01-01T00:00:00Z to round
597     * @return rounded milliseconds
598     */
599    public abstract long roundFloor(long instant);
600 
601    /**
602     * Round to the highest whole unit of this field. The value of this field
603     * and all fields of a higher magnitude may be incremented in order to
604     * achieve this result. The fractional millis that cannot be expressed in
605     * whole increments of this field are set to minimum.
606     * <p>
607     * For example, a datetime of 2002-11-02T23:34:56.789, rounded to the
608     * highest whole hour is 2002-11-03T00:00:00.000.
609     *
610     * @param instant  the milliseconds from 1970-01-01T00:00:00Z to round
611     * @return rounded milliseconds
612     */
613    public abstract long roundCeiling(long instant);
614 
615    /**
616     * Round to the nearest whole unit of this field. If the given millisecond
617     * value is closer to the floor or is exactly halfway, this function
618     * behaves like roundFloor. If the millisecond value is closer to the
619     * ceiling, this function behaves like roundCeiling.
620     *
621     * @param instant  the milliseconds from 1970-01-01T00:00:00Z to round
622     * @return rounded milliseconds
623     */
624    public abstract long roundHalfFloor(long instant);
625 
626    /**
627     * Round to the nearest whole unit of this field. If the given millisecond
628     * value is closer to the floor, this function behaves like roundFloor. If
629     * the millisecond value is closer to the ceiling or is exactly halfway,
630     * this function behaves like roundCeiling.
631     *
632     * @param instant  the milliseconds from 1970-01-01T00:00:00Z to round
633     * @return rounded milliseconds
634     */
635    public abstract long roundHalfCeiling(long instant);
636 
637    /**
638     * Round to the nearest whole unit of this field. If the given millisecond
639     * value is closer to the floor, this function behaves like roundFloor. If
640     * the millisecond value is closer to the ceiling, this function behaves
641     * like roundCeiling.
642     * <p>
643     * If the millisecond value is exactly halfway between the floor and
644     * ceiling, the ceiling is chosen over the floor only if it makes this
645     * field's value even.
646     *
647     * @param instant  the milliseconds from 1970-01-01T00:00:00Z to round
648     * @return rounded milliseconds
649     */
650    public abstract long roundHalfEven(long instant);
651 
652    /**
653     * Returns the fractional duration milliseconds of this field. In other
654     * words, calling remainder returns the duration that roundFloor would
655     * subtract.
656     * <p>
657     * For example, on a datetime of 2002-11-02T23:34:56.789, the remainder by
658     * hour is 34 minutes and 56.789 seconds.
659     *
660     * @param instant the milliseconds from 1970-01-01T00:00:00Z to get the
661     * remainder
662     * @return remainder duration, in milliseconds
663     */
664    public abstract long remainder(long instant);
665 
666    /**
667     * Get a suitable debug string.
668     * 
669     * @return debug string
670     */
671    public abstract String toString();
672    
673}

[all classes][org.joda.time]
EMMA 2.0.5312 (C) Vladimir Roubtsov