1 16 package org.joda.time.field; 17 18 import org.joda.time.Chronology; 19 import org.joda.time.DateTimeField; 20 21 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 52 public SkipUndoDateTimeField(Chronology chronology, DateTimeField field) { 53 this(chronology, field, 0); 54 } 55 56 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 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 } 103 | Popular Tags |