001 /*
002 * Copyright 2001-2005 Stephen Colebourne
003 *
004 * Licensed under the Apache License, Version 2.0 (the "License");
005 * you may not use this file except in compliance with the License.
006 * You may obtain a copy of the License at
007 *
008 * http://www.apache.org/licenses/LICENSE-2.0
009 *
010 * Unless required by applicable law or agreed to in writing, software
011 * distributed under the License is distributed on an "AS IS" BASIS,
012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013 * See the License for the specific language governing permissions and
014 * limitations under the License.
015 */
016 package org.joda.time.tz;
017
018 import org.joda.time.DateTimeZone;
019
020 /**
021 * Basic DateTimeZone implementation that has a fixed name key and offsets.
022 * <p>
023 * FixedDateTimeZone is thread-safe and immutable.
024 *
025 * @author Brian S O'Neill
026 * @since 1.0
027 */
028 public final class FixedDateTimeZone extends DateTimeZone {
029
030 private static final long serialVersionUID = -3513011772763289092L;
031
032 private final String iNameKey;
033 private final int iWallOffset;
034 private final int iStandardOffset;
035
036 public FixedDateTimeZone(String id, String nameKey,
037 int wallOffset, int standardOffset) {
038 super(id);
039 iNameKey = nameKey;
040 iWallOffset = wallOffset;
041 iStandardOffset = standardOffset;
042 }
043
044 public String getNameKey(long instant) {
045 return iNameKey;
046 }
047
048 public int getOffset(long instant) {
049 return iWallOffset;
050 }
051
052 public int getStandardOffset(long instant) {
053 return iStandardOffset;
054 }
055
056 public int getOffsetFromLocal(long instantLocal) {
057 return iWallOffset;
058 }
059
060 public boolean isFixed() {
061 return true;
062 }
063
064 public long nextTransition(long instant) {
065 return instant;
066 }
067
068 public long previousTransition(long instant) {
069 return instant;
070 }
071
072 /**
073 * Override to return the correct timzone instance.
074 * @since 1.5
075 */
076 public java.util.TimeZone toTimeZone() {
077 String id = getID();
078 if (id.length() == 6 && (id.startsWith("+") || id.startsWith("-"))) {
079 // standard format offset [+-]hh:mm
080 // our ID is without any prefix, so we need to add the GMT back
081 return java.util.TimeZone.getTimeZone("GMT" + getID());
082 }
083 // unusual offset, so setup a SimpleTimeZone as best we can
084 return new java.util.SimpleTimeZone(iWallOffset, getID());
085 }
086
087 public boolean equals(Object obj) {
088 if (this == obj) {
089 return true;
090 }
091 if (obj instanceof FixedDateTimeZone) {
092 FixedDateTimeZone other = (FixedDateTimeZone) obj;
093 return
094 getID().equals(other.getID()) &&
095 iStandardOffset == other.iStandardOffset &&
096 iWallOffset == other.iWallOffset;
097 }
098 return false;
099 }
100
101 public int hashCode() {
102 return getID().hashCode() + 37 * iStandardOffset + 31 * iWallOffset;
103 }
104
105 }