1
16 package org.joda.time.chrono;
17
18 import org.joda.time.DateTimeField;
19 import org.joda.time.DateTimeFieldType;
20 import org.joda.time.DurationField;
21 import org.joda.time.ReadablePartial;
22 import org.joda.time.field.DecoratedDateTimeField;
23 import org.joda.time.field.FieldUtils;
24
25
31 final class GJYearOfEraDateTimeField extends DecoratedDateTimeField {
32
33 @SuppressWarnings("unused")
34 private static final long serialVersionUID = -5961050944769862059L;
35
36 private final BasicChronology iChronology;
37
38
41 GJYearOfEraDateTimeField(DateTimeField yearField, BasicChronology chronology) {
42 super(yearField, DateTimeFieldType.yearOfEra());
43 iChronology = chronology;
44 }
45
46 @Override
47 public DurationField getRangeDurationField() {
48 return iChronology.eras();
49 }
50
51 public int get(long instant) {
52 int year = getWrappedField().get(instant);
53 if (year <= 0) {
54 year = 1 - year;
55 }
56 return year;
57 }
58
59 public long add(long instant, int years) {
60 return getWrappedField().add(instant, years);
61 }
62
63 public long add(long instant, long years) {
64 return getWrappedField().add(instant, years);
65 }
66
67 public long addWrapField(long instant, int years) {
68 return getWrappedField().addWrapField(instant, years);
69 }
70
71 public int[] addWrapField(ReadablePartial instant, int fieldIndex, int[] values, int years) {
72 return getWrappedField().addWrapField(instant, fieldIndex, values, years);
73 }
74
75 public int getDifference(long minuendInstant, long subtrahendInstant) {
76 return getWrappedField().getDifference(minuendInstant, subtrahendInstant);
77 }
78
79 public long getDifferenceAsLong(long minuendInstant, long subtrahendInstant) {
80 return getWrappedField().getDifferenceAsLong(minuendInstant, subtrahendInstant);
81 }
82
83
91 public long set(long instant, int year) {
92 FieldUtils.verifyValueBounds(this, year, 1, getMaximumValue());
93 if (iChronology.getYear(instant) <= 0) {
94 year = 1 - year;
95 }
96 return super.set(instant, year);
97 }
98
99 public int getMinimumValue() {
100 return 1;
101 }
102
103 public int getMaximumValue() {
104 return getWrappedField().getMaximumValue();
105 }
106
107 public long roundFloor(long instant) {
108 return getWrappedField().roundFloor(instant);
109 }
110
111 public long roundCeiling(long instant) {
112 return getWrappedField().roundCeiling(instant);
113 }
114
115 public long remainder(long instant) {
116 return getWrappedField().remainder(instant);
117 }
118
119
122 private Object readResolve() {
123 return iChronology.yearOfEra();
124 }
125 }
126