home *** CD-ROM | disk | FTP | other *** search
- package java.util;
-
- import java.io.IOException;
- import java.io.ObjectInputStream;
- import java.io.ObjectOutputStream;
-
- public class SimpleTimeZone extends TimeZone {
- private int startMonth;
- private int startDay;
- private int startDayOfWeek;
- private int startTime;
- private int endMonth;
- private int endDay;
- private int endDayOfWeek;
- private int endTime;
- private int startYear;
- private int rawOffset;
- private boolean useDaylight;
- private static final int millisPerHour = 3600000;
- private final byte[] monthLength;
- private static final byte[] staticMonthLength = new byte[]{31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
- private int startMode;
- private int endMode;
- private int dstSavings;
- private static final int DOM_MODE = 1;
- private static final int DOW_IN_MONTH_MODE = 2;
- private static final int DOW_GE_DOM_MODE = 3;
- private static final int DOW_LE_DOM_MODE = 4;
- static final long serialVersionUID = -403250971215465050L;
- static final int currentSerialVersion = 1;
- private int serialVersionOnStream;
-
- public SimpleTimeZone(int var1, String var2) {
- this.useDaylight = false;
- this.monthLength = staticMonthLength;
- this.serialVersionOnStream = 1;
- this.rawOffset = var1;
- ((TimeZone)this).setID(var2);
- this.dstSavings = 3600000;
- }
-
- public SimpleTimeZone(int var1, String var2, int var3, int var4, int var5, int var6, int var7, int var8, int var9, int var10) {
- this(var1, var2, var3, var4, var5, var6, var7, var8, var9, var10, 3600000);
- }
-
- SimpleTimeZone(int var1, String var2, int var3, int var4, int var5, int var6, int var7, int var8, int var9, int var10, int var11) {
- this.useDaylight = false;
- this.monthLength = staticMonthLength;
- this.serialVersionOnStream = 1;
- ((TimeZone)this).setID(var2);
- this.rawOffset = var1;
- this.startMonth = var3;
- this.startDay = var4;
- this.startDayOfWeek = var5;
- this.startTime = var6;
- this.endMonth = var7;
- this.endDay = var8;
- this.endDayOfWeek = var9;
- this.endTime = var10;
- this.dstSavings = var11;
- this.decodeRules();
- }
-
- public void setStartYear(int var1) {
- this.startYear = var1;
- }
-
- public void setStartRule(int var1, int var2, int var3, int var4) {
- this.startMonth = var1;
- this.startDay = var2;
- this.startDayOfWeek = var3;
- this.startTime = var4;
- this.decodeRules();
- }
-
- public void setEndRule(int var1, int var2, int var3, int var4) {
- this.endMonth = var1;
- this.endDay = var2;
- this.endDayOfWeek = var3;
- this.endTime = var4;
- this.decodeRules();
- }
-
- public int getOffset(int var1, int var2, int var3, int var4, int var5, int var6) {
- int var7 = this.rawOffset;
- if (this.useDaylight && var2 >= this.startYear && var1 == 1) {
- boolean var8 = this.startMonth > this.endMonth;
- int var9 = compareToRule(var3, var4, var5, var6, this.startMode, this.startMonth, this.startDayOfWeek, this.startDay, this.startTime);
- int var10 = compareToRule(var3, var4, var5, var6 + this.dstSavings, this.endMode, this.endMonth, this.endDayOfWeek, this.endDay, this.endTime);
- if (!var8 && var9 >= 0 && var10 < 0 || var8 && (var9 >= 0 || var10 < 0)) {
- var7 += this.dstSavings;
- }
-
- return var7;
- } else {
- return var7;
- }
- }
-
- private static int compareToRule(int var0, int var1, int var2, int var3, int var4, int var5, int var6, int var7, int var8) {
- if (var0 < var5) {
- return -1;
- } else if (var0 > var5) {
- return 1;
- } else {
- int var9 = 0;
- switch (var4) {
- case 1:
- var9 = var7;
- break;
- case 2:
- if (var7 > 0) {
- var9 = 1 + (var7 - 1) * 7 + (7 + var6 - (var2 - var1 + 1)) % 7;
- } else {
- byte var10 = staticMonthLength[var0];
- var9 = var10 + (var7 + 1) * 7 - (7 + (var2 + var10 - var1) - var6) % 7;
- }
- break;
- case 3:
- var9 = var7 + (49 + var6 - var7 - var2 + var1) % 7;
- break;
- case 4:
- var9 = var7 - (49 - var6 + var7 + var2 - var1) % 7;
- }
-
- if (var1 < var9) {
- return -1;
- } else if (var1 > var9) {
- return 1;
- } else if (var3 < var8) {
- return -1;
- } else {
- return var3 > var8 ? 1 : 0;
- }
- }
- }
-
- public int getRawOffset() {
- return this.rawOffset;
- }
-
- public void setRawOffset(int var1) {
- this.rawOffset = var1;
- }
-
- public boolean useDaylightTime() {
- return this.useDaylight;
- }
-
- public boolean inDaylightTime(Date var1) {
- GregorianCalendar var2 = new GregorianCalendar(this);
- ((Calendar)var2).setTime(var1);
- return var2.inDaylightTime();
- }
-
- public Object clone() {
- return super.clone();
- }
-
- public synchronized int hashCode() {
- return this.startMonth ^ this.startDay ^ this.startDayOfWeek ^ this.startTime ^ this.endMonth ^ this.endDay ^ this.endDayOfWeek ^ this.endTime ^ this.rawOffset;
- }
-
- public boolean equals(Object var1) {
- if (this == var1) {
- return true;
- } else if (!(var1 instanceof SimpleTimeZone)) {
- return false;
- } else {
- SimpleTimeZone var2 = (SimpleTimeZone)var1;
- return ((TimeZone)this).getID().equals(((TimeZone)var2).getID()) && this.rawOffset == var2.rawOffset && this.useDaylight == var2.useDaylight && this.dstSavings == var2.dstSavings && this.startMode == var2.startMode && this.startMonth == var2.startMonth && this.startDay == var2.startDay && this.startDayOfWeek == var2.startDayOfWeek && this.startTime == var2.startTime && this.endMode == var2.endMode && this.endMonth == var2.endMonth && this.endDay == var2.endDay && this.endDayOfWeek == var2.endDayOfWeek && this.endTime == var2.endTime && this.startYear == var2.startYear;
- }
- }
-
- public String toString() {
- return this.getClass().getName() + "[id=" + ((TimeZone)this).getID() + ",offset=" + this.rawOffset + ",dstSavings=" + this.dstSavings + ",useDaylight=" + this.useDaylight + ",startYear=" + this.startYear + ",startMode=" + this.startMode + ",startMonth=" + this.startMonth + ",startDay=" + this.startDay + ",startDayOfWeek=" + this.startDayOfWeek + ",startTime=" + this.startTime + ",endMode=" + this.endMode + ",endMonth=" + this.endMonth + ",endDay=" + this.endDay + ",endDayOfWeek=" + this.endDayOfWeek + ",endTime=" + this.endTime + ']';
- }
-
- private void decodeRules() {
- this.useDaylight = this.startDay != 0 && this.endDay != 0;
- if (this.startDayOfWeek == 0) {
- this.startMode = 1;
- } else if (this.startDayOfWeek > 0) {
- this.startMode = 2;
- } else {
- this.startDayOfWeek = -this.startDayOfWeek;
- if (this.startDay > 0) {
- this.startMode = 3;
- } else {
- this.startDay = -this.startDay;
- this.startMode = 4;
- }
- }
-
- if (this.endDayOfWeek == 0) {
- this.endMode = 1;
- } else if (this.endDayOfWeek > 0) {
- this.endMode = 2;
- } else {
- this.endDayOfWeek = -this.endDayOfWeek;
- if (this.endDay > 0) {
- this.endMode = 3;
- } else {
- this.endDay = -this.endDay;
- this.endMode = 4;
- }
- }
- }
-
- private void makeRulesCompatible() {
- switch (this.startMode) {
- case 1:
- this.startDay = 1 + this.startDay / 7;
- this.startDayOfWeek = 1;
- case 2:
- default:
- break;
- case 3:
- if (this.startDay != 1) {
- this.startDay = 1 + this.startDay / 7;
- }
- break;
- case 4:
- if (this.startDay >= 30) {
- this.startDay = -1;
- } else {
- this.startDay = 1 + this.startDay / 7;
- }
- }
-
- switch (this.endMode) {
- case 1:
- this.endDay = 1 + this.endDay / 7;
- this.endDayOfWeek = 1;
- return;
- case 3:
- if (this.endDay != 1) {
- this.endDay = 1 + this.endDay / 7;
- return;
- }
- case 2:
- default:
- return;
- case 4:
- if (this.endDay >= 30) {
- this.endDay = -1;
- } else {
- this.endDay = 1 + this.endDay / 7;
- }
- }
- }
-
- private byte[] packRules() {
- byte[] var1 = new byte[]{(byte)this.startDay, (byte)this.startDayOfWeek, (byte)this.endDay, (byte)this.endDayOfWeek};
- return var1;
- }
-
- private void unpackRules(byte[] var1) {
- this.startDay = var1[0];
- this.startDayOfWeek = var1[1];
- this.endDay = var1[2];
- this.endDayOfWeek = var1[3];
- }
-
- private void writeObject(ObjectOutputStream var1) throws IOException {
- byte[] var2 = this.packRules();
- this.makeRulesCompatible();
- var1.defaultWriteObject();
- var1.writeInt(var2.length);
- var1.write(var2);
- this.unpackRules(var2);
- }
-
- private void readObject(ObjectInputStream var1) throws IOException, ClassNotFoundException {
- var1.defaultReadObject();
- if (this.serialVersionOnStream < 1) {
- if (this.startDayOfWeek == 0) {
- this.startDayOfWeek = 1;
- }
-
- if (this.endDayOfWeek == 0) {
- this.endDayOfWeek = 1;
- }
-
- this.startMode = this.endMode = 2;
- this.dstSavings = 3600000;
- } else {
- int var2 = var1.readInt();
- byte[] var3 = new byte[var2];
- var1.readFully(var3);
- this.unpackRules(var3);
- }
-
- this.serialVersionOnStream = 1;
- }
- }
-