1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package org.joda.time.field;
17
18 import org.joda.time.Chronology;
19 import org.joda.time.DateTimeField;
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34 public final class SkipUndoDateTimeField extends DelegatedDateTimeField {
35
36
37 private static final long serialVersionUID = -5875876968979L;
38
39
40 private final Chronology iChronology;
41
42 private final int iSkip;
43
44 private transient int iMinValue;
45
46
47
48
49
50
51
52 public SkipUndoDateTimeField(Chronology chronology, DateTimeField field) {
53 this(chronology, field, 0);
54 }
55
56
57
58
59
60
61
62
63 public SkipUndoDateTimeField(Chronology chronology, DateTimeField field, int skip) {
64 super(field);
65 iChronology = chronology;
66 int min = super.getMinimumValue();
67 if (min < skip) {
68 iMinValue = min + 1;
69 } else if (min == skip + 1) {
70 iMinValue = skip;
71 } else {
72 iMinValue = min;
73 }
74 iSkip = skip;
75 }
76
77
78 public int get(long millis) {
79 int value = super.get(millis);
80 if (value < iSkip) {
81 value++;
82 }
83 return value;
84 }
85
86 public long set(long millis, int value) {
87 FieldUtils.verifyValueBounds(this, value, iMinValue, getMaximumValue());
88 if (value <= iSkip) {
89 value--;
90 }
91 return super.set(millis, value);
92 }
93
94 public int getMinimumValue() {
95 return iMinValue;
96 }
97
98 private Object readResolve() {
99 return getType().getField(iChronology);
100 }
101
102 }