1 | /* |
2 | * Copyright 2001-2005 Stephen Colebourne |
3 | * |
4 | * Licensed under the Apache License, Version 2.0 (the "License"); |
5 | * you may not use this file except in compliance with the License. |
6 | * You may obtain a copy of the License at |
7 | * |
8 | * http://www.apache.org/licenses/LICENSE-2.0 |
9 | * |
10 | * Unless required by applicable law or agreed to in writing, software |
11 | * distributed under the License is distributed on an "AS IS" BASIS, |
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
13 | * See the License for the specific language governing permissions and |
14 | * limitations under the License. |
15 | */ |
16 | package org.joda.time.chrono; |
17 | |
18 | import java.util.Locale; |
19 | |
20 | import org.joda.time.DateTimeConstants; |
21 | import org.joda.time.DateTimeFieldType; |
22 | import org.joda.time.DurationField; |
23 | import org.joda.time.field.PreciseDurationDateTimeField; |
24 | |
25 | /** |
26 | * GJDayOfWeekDateTimeField provides time calculations for the |
27 | * day of the week component of time. |
28 | * |
29 | * @since 1.0 |
30 | * @author Guy Allard |
31 | * @author Stephen Colebourne |
32 | * @author Brian S O'Neill |
33 | */ |
34 | final class GJDayOfWeekDateTimeField extends PreciseDurationDateTimeField { |
35 | |
36 | /** Serialization version */ |
37 | private static final long serialVersionUID = -3857947176719041436L; |
38 | |
39 | private final BasicChronology iChronology; |
40 | |
41 | /** |
42 | * Restricted constructor. |
43 | */ |
44 | GJDayOfWeekDateTimeField(BasicChronology chronology, DurationField days) { |
45 | super(DateTimeFieldType.dayOfWeek(), days); |
46 | iChronology = chronology; |
47 | } |
48 | |
49 | /** |
50 | * Get the value of the specified time instant. |
51 | * |
52 | * @param instant the time instant in millis to query |
53 | * @return the day of the week extracted from the input |
54 | */ |
55 | public int get(long instant) { |
56 | return iChronology.getDayOfWeek(instant); |
57 | } |
58 | |
59 | /** |
60 | * Get the textual value of the specified time instant. |
61 | * |
62 | * @param fieldValue the field value to query |
63 | * @param locale the locale to use |
64 | * @return the day of the week, such as 'Monday' |
65 | */ |
66 | public String getAsText(int fieldValue, Locale locale) { |
67 | return GJLocaleSymbols.forLocale(locale).dayOfWeekValueToText(fieldValue); |
68 | } |
69 | |
70 | /** |
71 | * Get the abbreviated textual value of the specified time instant. |
72 | * |
73 | * @param fieldValue the field value to query |
74 | * @param locale the locale to use |
75 | * @return the day of the week, such as 'Mon' |
76 | */ |
77 | public String getAsShortText(int fieldValue, Locale locale) { |
78 | return GJLocaleSymbols.forLocale(locale).dayOfWeekValueToShortText(fieldValue); |
79 | } |
80 | |
81 | /** |
82 | * Convert the specified text and locale into a value. |
83 | * |
84 | * @param text the text to convert |
85 | * @param locale the locale to convert using |
86 | * @return the value extracted from the text |
87 | * @throws IllegalArgumentException if the text is invalid |
88 | */ |
89 | protected int convertText(String text, Locale locale) { |
90 | return GJLocaleSymbols.forLocale(locale).dayOfWeekTextToValue(text); |
91 | } |
92 | |
93 | public DurationField getRangeDurationField() { |
94 | return iChronology.weeks(); |
95 | } |
96 | |
97 | /** |
98 | * Get the minimum value that this field can have. |
99 | * |
100 | * @return the field's minimum value |
101 | */ |
102 | public int getMinimumValue() { |
103 | return DateTimeConstants.MONDAY; |
104 | } |
105 | |
106 | /** |
107 | * Get the maximum value that this field can have. |
108 | * |
109 | * @return the field's maximum value |
110 | */ |
111 | public int getMaximumValue() { |
112 | return DateTimeConstants.SUNDAY; |
113 | } |
114 | |
115 | /** |
116 | * Get the maximum length of the text returned by this field. |
117 | * |
118 | * @param locale the locale to use |
119 | * @return the maximum textual length |
120 | */ |
121 | public int getMaximumTextLength(Locale locale) { |
122 | return GJLocaleSymbols.forLocale(locale).getDayOfWeekMaxTextLength(); |
123 | } |
124 | |
125 | /** |
126 | * Get the maximum length of the abbreviated text returned by this field. |
127 | * |
128 | * @param locale the locale to use |
129 | * @return the maximum abbreviated textual length |
130 | */ |
131 | public int getMaximumShortTextLength(Locale locale) { |
132 | return GJLocaleSymbols.forLocale(locale).getDayOfWeekMaxShortTextLength(); |
133 | } |
134 | |
135 | /** |
136 | * Serialization singleton |
137 | */ |
138 | private Object readResolve() { |
139 | return iChronology.dayOfWeek(); |
140 | } |
141 | } |