View Javadoc

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.chrono;
17  
18  import org.joda.time.DateTimeField;
19  import org.joda.time.DateTimeFieldType;
20  import org.joda.time.ReadablePartial;
21  import org.joda.time.field.DecoratedDateTimeField;
22  import org.joda.time.field.FieldUtils;
23  
24  /**
25   * This field is not publicy exposed by ISOChronology, but rather it is used to
26   * build the yearOfCentury and centuryOfEra fields. It merely drops the sign of
27   * the year.
28   *
29   * @author Brian S O'Neill
30   * @see GJYearOfEraDateTimeField
31   * @since 1.0
32   */
33  class ISOYearOfEraDateTimeField extends DecoratedDateTimeField {
34  
35      private static final long serialVersionUID = 7037524068969447317L;
36  
37      /**
38       * Singleton instance
39       */
40      static final DateTimeField INSTANCE = new ISOYearOfEraDateTimeField();
41  
42      /**
43       * Restricted constructor.
44       */
45      private ISOYearOfEraDateTimeField() {
46          super(GregorianChronology.getInstanceUTC().year(), DateTimeFieldType.yearOfEra());
47      }
48  
49      public int get(long instant) {
50          int year = getWrappedField().get(instant);
51          return year < 0 ? -year : year;
52      }
53  
54      public long add(long instant, int years) {
55          return getWrappedField().add(instant, years);
56      }
57  
58      public long add(long instant, long years) {
59          return getWrappedField().add(instant, years);
60      }
61  
62      public long addWrapField(long instant, int years) {
63          return getWrappedField().addWrapField(instant, years);
64      }
65  
66      public int[] addWrapField(ReadablePartial instant, int fieldIndex, int[] values, int years) {
67          return getWrappedField().addWrapField(instant, fieldIndex, values, years);
68      }
69  
70      public int getDifference(long minuendInstant, long subtrahendInstant) {
71          return getWrappedField().getDifference(minuendInstant, subtrahendInstant);
72      }
73  
74      public long getDifferenceAsLong(long minuendInstant, long subtrahendInstant) {
75          return getWrappedField().getDifferenceAsLong(minuendInstant, subtrahendInstant);
76      }
77  
78      public long set(long instant, int year) {
79          FieldUtils.verifyValueBounds(this, year, 0, getMaximumValue());
80          if (getWrappedField().get(instant) < 0) {
81              year = -year;
82          }
83          return super.set(instant, year);
84      }
85  
86      public int getMinimumValue() {
87          return 0;
88      }
89  
90      public int getMaximumValue() {
91          return getWrappedField().getMaximumValue();
92      }
93  
94      public long roundFloor(long instant) {
95          return getWrappedField().roundFloor(instant);
96      }
97  
98      public long roundCeiling(long instant) {
99          return getWrappedField().roundCeiling(instant);
100     }
101 
102     public long remainder(long instant) {
103         return getWrappedField().remainder(instant);
104     }
105 
106     /**
107      * Serialization singleton
108      */
109     private Object readResolve() {
110         return INSTANCE;
111     }
112 }