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.DateTimeFieldType;
19 import org.joda.time.DurationField;
20 import org.joda.time.ReadablePartial;
21 import org.joda.time.field.PreciseDurationDateTimeField;
22
23
24
25
26
27
28
29
30
31 final class BasicDayOfMonthDateTimeField extends PreciseDurationDateTimeField {
32
33 private static final long serialVersionUID = -4677223814028011723L;
34
35 private final BasicChronology iChronology;
36
37
38
39
40 BasicDayOfMonthDateTimeField(BasicChronology chronology, DurationField days) {
41 super(DateTimeFieldType.dayOfMonth(), days);
42 iChronology = chronology;
43 }
44
45
46 public int get(long instant) {
47 return iChronology.getDayOfMonth(instant);
48 }
49
50 public DurationField getRangeDurationField() {
51 return iChronology.months();
52 }
53
54 public int getMinimumValue() {
55 return 1;
56 }
57
58 public int getMaximumValue() {
59 return iChronology.getDaysInMonthMax();
60 }
61
62 public int getMaximumValue(long instant) {
63 return iChronology.getDaysInMonthMax(instant);
64 }
65
66 public int getMaximumValue(ReadablePartial partial) {
67 if (partial.isSupported(DateTimeFieldType.monthOfYear())) {
68 int month = partial.get(DateTimeFieldType.monthOfYear());
69 if (partial.isSupported(DateTimeFieldType.year())) {
70 int year = partial.get(DateTimeFieldType.year());
71 return iChronology.getDaysInYearMonth(year, month);
72 }
73 return iChronology.getDaysInMonthMax(month);
74 }
75 return getMaximumValue();
76 }
77
78 public int getMaximumValue(ReadablePartial partial, int[] values) {
79 int size = partial.size();
80 for (int i = 0; i < size; i++) {
81 if (partial.getFieldType(i) == DateTimeFieldType.monthOfYear()) {
82 int month = values[i];
83 for (int j = 0; j < size; j++) {
84 if (partial.getFieldType(j) == DateTimeFieldType.year()) {
85 int year = values[j];
86 return iChronology.getDaysInYearMonth(year, month);
87 }
88 }
89 return iChronology.getDaysInMonthMax(month);
90 }
91 }
92 return getMaximumValue();
93 }
94
95 protected int getMaximumValueForSet(long instant, int value) {
96 return iChronology.getDaysInMonthMaxForSet(instant, value);
97 }
98
99
100
101
102 private Object readResolve() {
103 return iChronology.dayOfMonth();
104 }
105 }