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.tz;
17
18 import org.joda.time.DateTimeZone;
19
20 /**
21  * Basic DateTimeZone implementation that has a fixed name key and offsets.
22  * <p>
23  * FixedDateTimeZone is thread-safe and immutable.
24  * 
25  * @author Brian S O'Neill
26  * @since 1.0
27  */

28 public final class FixedDateTimeZone extends DateTimeZone {
29
30     private static final long serialVersionUID = -3513011772763289092L;
31
32     private final String iNameKey;
33     private final int iWallOffset;
34     private final int iStandardOffset;
35
36     public FixedDateTimeZone(String id, String nameKey,
37                              int wallOffset, int standardOffset) {
38         super(id);
39         iNameKey = nameKey;
40         iWallOffset = wallOffset;
41         iStandardOffset = standardOffset;
42     }
43
44     public String getNameKey(long instant) {
45         return iNameKey;
46     }
47
48     public int getOffset(long instant) {
49         return iWallOffset;
50     }
51
52     public int getStandardOffset(long instant) {
53         return iStandardOffset;
54     }
55
56     public int getOffsetFromLocal(long instantLocal) {
57         return iWallOffset;
58     }
59
60     public boolean isFixed() {
61         return true;
62     }
63
64     public long nextTransition(long instant) {
65         return instant;
66     }
67
68     public long previousTransition(long instant) {
69         return instant;
70     }
71
72     /**
73      * Override to return the correct timzone instance.
74      * @since 1.5
75      */

76     public java.util.TimeZone toTimeZone() {
77         String id = getID();
78         if (id.length() == 6 && (id.startsWith("+") || id.startsWith("-"))) {
79             // standard format offset [+-]hh:mm
80             // our ID is without any prefix, so we need to add the GMT back
81             return java.util.TimeZone.getTimeZone("GMT" + getID());
82         }
83         // unusual offset, so setup a SimpleTimeZone as best we can
84         return new java.util.SimpleTimeZone(iWallOffset, getID());
85     }
86
87     public boolean equals(Object obj) {
88         if (this == obj) {
89             return true;
90         }
91         if (obj instanceof FixedDateTimeZone) {
92             FixedDateTimeZone other = (FixedDateTimeZone) obj;
93             return
94                 getID().equals(other.getID()) &&
95                 iStandardOffset == other.iStandardOffset &&
96                 iWallOffset == other.iWallOffset;
97         }
98         return false;
99     }
100
101     public int hashCode() {
102         return getID().hashCode() + 37 * iStandardOffset + 31 * iWallOffset;
103     }
104
105 }
106