1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package org.joda.time.chrono;
17
18 import org.joda.time.Chronology;
19 import org.joda.time.DateTimeField;
20 import org.joda.time.DateTimeZone;
21 import org.joda.time.field.StrictDateTimeField;
22
23
24
25
26
27
28
29
30
31
32
33 public final class StrictChronology extends AssembledChronology {
34
35
36 private static final long serialVersionUID = 6633006628097111960L;
37
38
39
40
41
42
43
44 public static StrictChronology getInstance(Chronology base) {
45 if (base == null) {
46 throw new IllegalArgumentException("Must supply a chronology");
47 }
48 return new StrictChronology(base);
49 }
50
51 private transient Chronology iWithUTC;
52
53
54
55
56
57
58 private StrictChronology(Chronology base) {
59 super(base, null);
60 }
61
62 public Chronology withUTC() {
63 if (iWithUTC == null) {
64 if (getZone() == DateTimeZone.UTC) {
65 iWithUTC = this;
66 } else {
67 iWithUTC = StrictChronology.getInstance(getBase().withUTC());
68 }
69 }
70 return iWithUTC;
71 }
72
73 public Chronology withZone(DateTimeZone zone) {
74 if (zone == null) {
75 zone = DateTimeZone.getDefault();
76 }
77 if (zone == DateTimeZone.UTC) {
78 return withUTC();
79 }
80 if (zone == getZone()) {
81 return this;
82 }
83 return StrictChronology.getInstance(getBase().withZone(zone));
84 }
85
86 protected void assemble(Fields fields) {
87 fields.year = convertField(fields.year);
88 fields.yearOfEra = convertField(fields.yearOfEra);
89 fields.yearOfCentury = convertField(fields.yearOfCentury);
90 fields.centuryOfEra = convertField(fields.centuryOfEra);
91 fields.era = convertField(fields.era);
92 fields.dayOfWeek = convertField(fields.dayOfWeek);
93 fields.dayOfMonth = convertField(fields.dayOfMonth);
94 fields.dayOfYear = convertField(fields.dayOfYear);
95 fields.monthOfYear = convertField(fields.monthOfYear);
96 fields.weekOfWeekyear = convertField(fields.weekOfWeekyear);
97 fields.weekyear = convertField(fields.weekyear);
98 fields.weekyearOfCentury = convertField(fields.weekyearOfCentury);
99
100 fields.millisOfSecond = convertField(fields.millisOfSecond);
101 fields.millisOfDay = convertField(fields.millisOfDay);
102 fields.secondOfMinute = convertField(fields.secondOfMinute);
103 fields.secondOfDay = convertField(fields.secondOfDay);
104 fields.minuteOfHour = convertField(fields.minuteOfHour);
105 fields.minuteOfDay = convertField(fields.minuteOfDay);
106 fields.hourOfDay = convertField(fields.hourOfDay);
107 fields.hourOfHalfday = convertField(fields.hourOfHalfday);
108 fields.clockhourOfDay = convertField(fields.clockhourOfDay);
109 fields.clockhourOfHalfday = convertField(fields.clockhourOfHalfday);
110 fields.halfdayOfDay = convertField(fields.halfdayOfDay);
111 }
112
113 private static final DateTimeField convertField(DateTimeField field) {
114 return StrictDateTimeField.getInstance(field);
115 }
116
117
118
119
120
121
122
123
124
125
126 public boolean equals(Object obj) {
127 if (this == obj) {
128 return true;
129 }
130 if (obj instanceof StrictChronology == false) {
131 return false;
132 }
133 StrictChronology chrono = (StrictChronology) obj;
134 return getBase().equals(chrono.getBase());
135 }
136
137
138
139
140
141
142
143 public int hashCode() {
144 return 352831696 + getBase().hashCode() * 7;
145 }
146
147
148
149
150
151
152 public String toString() {
153 return "StrictChronology[" + getBase().toString() + ']';
154 }
155
156 }