KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > joda > time > chrono > GJEraDateTimeField


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 JavaDoc;
19
20 import org.joda.time.DateTimeConstants;
21 import org.joda.time.DateTimeFieldType;
22 import org.joda.time.DurationField;
23 import org.joda.time.DurationFieldType;
24 import org.joda.time.field.BaseDateTimeField;
25 import org.joda.time.field.FieldUtils;
26 import org.joda.time.field.UnsupportedDurationField;
27
28 /**
29  * Provides time calculations for the era component of time.
30  *
31  * @author Stephen Colebourne
32  * @author Brian S O'Neill
33  * @since 1.0
34  */

35 final class GJEraDateTimeField extends BaseDateTimeField {
36     
37     /** Serialization version */
38     private static final long serialVersionUID = 4240986525305515528L;
39
40     private final BasicChronology iChronology;
41
42     /**
43      * Restricted constructor
44      */

45     GJEraDateTimeField(BasicChronology chronology) {
46         super(DateTimeFieldType.era());
47         iChronology = chronology;
48     }
49
50     public boolean isLenient() {
51         return false;
52     }
53
54     /**
55      * Get the Era component of the specified time instant.
56      *
57      * @param instant the time instant in millis to query.
58      */

59     public int get(long instant) {
60         if (iChronology.getYear(instant) <= 0) {
61             return DateTimeConstants.BCE;
62         } else {
63             return DateTimeConstants.CE;
64         }
65     }
66
67     public String JavaDoc getAsText(int fieldValue, Locale JavaDoc locale) {
68         return GJLocaleSymbols.forLocale(locale).eraValueToText(fieldValue);
69     }
70
71     /**
72      * Set the Era component of the specified time instant.
73      *
74      * @param instant the time instant in millis to update.
75      * @param era the era to update the time to.
76      * @return the updated time instant.
77      * @throws IllegalArgumentException if era is invalid.
78      */

79     public long set(long instant, int era) {
80         FieldUtils.verifyValueBounds(this, era, DateTimeConstants.BCE, DateTimeConstants.CE);
81             
82         int oldEra = get(instant);
83         if (oldEra != era) {
84             int year = iChronology.getYear(instant);
85             return iChronology.setYear(instant, -year);
86         } else {
87             return instant;
88         }
89     }
90
91     public long set(long instant, String JavaDoc text, Locale JavaDoc locale) {
92         return set(instant, GJLocaleSymbols.forLocale(locale).eraTextToValue(text));
93     }
94
95     public long roundFloor(long instant) {
96         if (get(instant) == DateTimeConstants.CE) {
97             return iChronology.setYear(0, 1);
98         } else {
99             return Long.MIN_VALUE;
100         }
101     }
102
103     public long roundCeiling(long instant) {
104         if (get(instant) == DateTimeConstants.BCE) {
105             return iChronology.setYear(0, 1);
106         } else {
107             return Long.MAX_VALUE;
108         }
109     }
110
111     public long roundHalfFloor(long instant) {
112         // In reality, the era is infinite, so there is no halfway point.
113
return roundFloor(instant);
114     }
115
116     public long roundHalfCeiling(long instant) {
117         // In reality, the era is infinite, so there is no halfway point.
118
return roundFloor(instant);
119     }
120
121     public long roundHalfEven(long instant) {
122         // In reality, the era is infinite, so there is no halfway point.
123
return roundFloor(instant);
124     }
125
126     public DurationField getDurationField() {
127         return UnsupportedDurationField.getInstance(DurationFieldType.eras());
128     }
129
130     public DurationField getRangeDurationField() {
131         return null;
132     }
133
134     public int getMinimumValue() {
135         return DateTimeConstants.BCE;
136     }
137
138     public int getMaximumValue() {
139         return DateTimeConstants.CE;
140     }
141
142     public int getMaximumTextLength(Locale JavaDoc locale) {
143         return GJLocaleSymbols.forLocale(locale).getEraMaxTextLength();
144     }
145
146     /**
147      * Serialization singleton
148      */

149     private Object JavaDoc readResolve() {
150         return iChronology.era();
151     }
152 }
153
Popular Tags