home *** CD-ROM | disk | FTP | other *** search
/ PC Pro 1999 April / DPPCPRO0499.ISO / April / Notes / 50b2wic.exe / DATA1.CAB / NotesProgramFilesJavaSupport / rt.jar / java / util / SimpleTimeZone.class (.txt) < prev    next >
Encoding:
Java Class File  |  1998-04-23  |  6.1 KB  |  297 lines

  1. package java.util;
  2.  
  3. import java.io.IOException;
  4. import java.io.ObjectInputStream;
  5. import java.io.ObjectOutputStream;
  6.  
  7. public class SimpleTimeZone extends TimeZone {
  8.    private int startMonth;
  9.    private int startDay;
  10.    private int startDayOfWeek;
  11.    private int startTime;
  12.    private int endMonth;
  13.    private int endDay;
  14.    private int endDayOfWeek;
  15.    private int endTime;
  16.    private int startYear;
  17.    private int rawOffset;
  18.    private boolean useDaylight;
  19.    private static final int millisPerHour = 3600000;
  20.    private final byte[] monthLength;
  21.    private static final byte[] staticMonthLength = new byte[]{31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
  22.    private int startMode;
  23.    private int endMode;
  24.    private int dstSavings;
  25.    private static final int DOM_MODE = 1;
  26.    private static final int DOW_IN_MONTH_MODE = 2;
  27.    private static final int DOW_GE_DOM_MODE = 3;
  28.    private static final int DOW_LE_DOM_MODE = 4;
  29.    static final long serialVersionUID = -403250971215465050L;
  30.    static final int currentSerialVersion = 1;
  31.    private int serialVersionOnStream;
  32.  
  33.    public SimpleTimeZone(int var1, String var2) {
  34.       this.useDaylight = false;
  35.       this.monthLength = staticMonthLength;
  36.       this.serialVersionOnStream = 1;
  37.       this.rawOffset = var1;
  38.       ((TimeZone)this).setID(var2);
  39.       this.dstSavings = 3600000;
  40.    }
  41.  
  42.    public SimpleTimeZone(int var1, String var2, int var3, int var4, int var5, int var6, int var7, int var8, int var9, int var10) {
  43.       this(var1, var2, var3, var4, var5, var6, var7, var8, var9, var10, 3600000);
  44.    }
  45.  
  46.    SimpleTimeZone(int var1, String var2, int var3, int var4, int var5, int var6, int var7, int var8, int var9, int var10, int var11) {
  47.       this.useDaylight = false;
  48.       this.monthLength = staticMonthLength;
  49.       this.serialVersionOnStream = 1;
  50.       ((TimeZone)this).setID(var2);
  51.       this.rawOffset = var1;
  52.       this.startMonth = var3;
  53.       this.startDay = var4;
  54.       this.startDayOfWeek = var5;
  55.       this.startTime = var6;
  56.       this.endMonth = var7;
  57.       this.endDay = var8;
  58.       this.endDayOfWeek = var9;
  59.       this.endTime = var10;
  60.       this.dstSavings = var11;
  61.       this.decodeRules();
  62.    }
  63.  
  64.    public void setStartYear(int var1) {
  65.       this.startYear = var1;
  66.    }
  67.  
  68.    public void setStartRule(int var1, int var2, int var3, int var4) {
  69.       this.startMonth = var1;
  70.       this.startDay = var2;
  71.       this.startDayOfWeek = var3;
  72.       this.startTime = var4;
  73.       this.decodeRules();
  74.    }
  75.  
  76.    public void setEndRule(int var1, int var2, int var3, int var4) {
  77.       this.endMonth = var1;
  78.       this.endDay = var2;
  79.       this.endDayOfWeek = var3;
  80.       this.endTime = var4;
  81.       this.decodeRules();
  82.    }
  83.  
  84.    public int getOffset(int var1, int var2, int var3, int var4, int var5, int var6) {
  85.       int var7 = this.rawOffset;
  86.       if (this.useDaylight && var2 >= this.startYear && var1 == 1) {
  87.          boolean var8 = this.startMonth > this.endMonth;
  88.          int var9 = compareToRule(var3, var4, var5, var6, this.startMode, this.startMonth, this.startDayOfWeek, this.startDay, this.startTime);
  89.          int var10 = compareToRule(var3, var4, var5, var6 + this.dstSavings, this.endMode, this.endMonth, this.endDayOfWeek, this.endDay, this.endTime);
  90.          if (!var8 && var9 >= 0 && var10 < 0 || var8 && (var9 >= 0 || var10 < 0)) {
  91.             var7 += this.dstSavings;
  92.          }
  93.  
  94.          return var7;
  95.       } else {
  96.          return var7;
  97.       }
  98.    }
  99.  
  100.    private static int compareToRule(int var0, int var1, int var2, int var3, int var4, int var5, int var6, int var7, int var8) {
  101.       if (var0 < var5) {
  102.          return -1;
  103.       } else if (var0 > var5) {
  104.          return 1;
  105.       } else {
  106.          int var9 = 0;
  107.          switch (var4) {
  108.             case 1:
  109.                var9 = var7;
  110.                break;
  111.             case 2:
  112.                if (var7 > 0) {
  113.                   var9 = 1 + (var7 - 1) * 7 + (7 + var6 - (var2 - var1 + 1)) % 7;
  114.                } else {
  115.                   byte var10 = staticMonthLength[var0];
  116.                   var9 = var10 + (var7 + 1) * 7 - (7 + (var2 + var10 - var1) - var6) % 7;
  117.                }
  118.                break;
  119.             case 3:
  120.                var9 = var7 + (49 + var6 - var7 - var2 + var1) % 7;
  121.                break;
  122.             case 4:
  123.                var9 = var7 - (49 - var6 + var7 + var2 - var1) % 7;
  124.          }
  125.  
  126.          if (var1 < var9) {
  127.             return -1;
  128.          } else if (var1 > var9) {
  129.             return 1;
  130.          } else if (var3 < var8) {
  131.             return -1;
  132.          } else {
  133.             return var3 > var8 ? 1 : 0;
  134.          }
  135.       }
  136.    }
  137.  
  138.    public int getRawOffset() {
  139.       return this.rawOffset;
  140.    }
  141.  
  142.    public void setRawOffset(int var1) {
  143.       this.rawOffset = var1;
  144.    }
  145.  
  146.    public boolean useDaylightTime() {
  147.       return this.useDaylight;
  148.    }
  149.  
  150.    public boolean inDaylightTime(Date var1) {
  151.       GregorianCalendar var2 = new GregorianCalendar(this);
  152.       ((Calendar)var2).setTime(var1);
  153.       return var2.inDaylightTime();
  154.    }
  155.  
  156.    public Object clone() {
  157.       return super.clone();
  158.    }
  159.  
  160.    public synchronized int hashCode() {
  161.       return this.startMonth ^ this.startDay ^ this.startDayOfWeek ^ this.startTime ^ this.endMonth ^ this.endDay ^ this.endDayOfWeek ^ this.endTime ^ this.rawOffset;
  162.    }
  163.  
  164.    public boolean equals(Object var1) {
  165.       if (this == var1) {
  166.          return true;
  167.       } else if (!(var1 instanceof SimpleTimeZone)) {
  168.          return false;
  169.       } else {
  170.          SimpleTimeZone var2 = (SimpleTimeZone)var1;
  171.          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;
  172.       }
  173.    }
  174.  
  175.    public String toString() {
  176.       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 + ']';
  177.    }
  178.  
  179.    private void decodeRules() {
  180.       this.useDaylight = this.startDay != 0 && this.endDay != 0;
  181.       if (this.startDayOfWeek == 0) {
  182.          this.startMode = 1;
  183.       } else if (this.startDayOfWeek > 0) {
  184.          this.startMode = 2;
  185.       } else {
  186.          this.startDayOfWeek = -this.startDayOfWeek;
  187.          if (this.startDay > 0) {
  188.             this.startMode = 3;
  189.          } else {
  190.             this.startDay = -this.startDay;
  191.             this.startMode = 4;
  192.          }
  193.       }
  194.  
  195.       if (this.endDayOfWeek == 0) {
  196.          this.endMode = 1;
  197.       } else if (this.endDayOfWeek > 0) {
  198.          this.endMode = 2;
  199.       } else {
  200.          this.endDayOfWeek = -this.endDayOfWeek;
  201.          if (this.endDay > 0) {
  202.             this.endMode = 3;
  203.          } else {
  204.             this.endDay = -this.endDay;
  205.             this.endMode = 4;
  206.          }
  207.       }
  208.    }
  209.  
  210.    private void makeRulesCompatible() {
  211.       switch (this.startMode) {
  212.          case 1:
  213.             this.startDay = 1 + this.startDay / 7;
  214.             this.startDayOfWeek = 1;
  215.          case 2:
  216.          default:
  217.             break;
  218.          case 3:
  219.             if (this.startDay != 1) {
  220.                this.startDay = 1 + this.startDay / 7;
  221.             }
  222.             break;
  223.          case 4:
  224.             if (this.startDay >= 30) {
  225.                this.startDay = -1;
  226.             } else {
  227.                this.startDay = 1 + this.startDay / 7;
  228.             }
  229.       }
  230.  
  231.       switch (this.endMode) {
  232.          case 1:
  233.             this.endDay = 1 + this.endDay / 7;
  234.             this.endDayOfWeek = 1;
  235.             return;
  236.          case 3:
  237.             if (this.endDay != 1) {
  238.                this.endDay = 1 + this.endDay / 7;
  239.                return;
  240.             }
  241.          case 2:
  242.          default:
  243.             return;
  244.          case 4:
  245.             if (this.endDay >= 30) {
  246.                this.endDay = -1;
  247.             } else {
  248.                this.endDay = 1 + this.endDay / 7;
  249.             }
  250.       }
  251.    }
  252.  
  253.    private byte[] packRules() {
  254.       byte[] var1 = new byte[]{(byte)this.startDay, (byte)this.startDayOfWeek, (byte)this.endDay, (byte)this.endDayOfWeek};
  255.       return var1;
  256.    }
  257.  
  258.    private void unpackRules(byte[] var1) {
  259.       this.startDay = var1[0];
  260.       this.startDayOfWeek = var1[1];
  261.       this.endDay = var1[2];
  262.       this.endDayOfWeek = var1[3];
  263.    }
  264.  
  265.    private void writeObject(ObjectOutputStream var1) throws IOException {
  266.       byte[] var2 = this.packRules();
  267.       this.makeRulesCompatible();
  268.       var1.defaultWriteObject();
  269.       var1.writeInt(var2.length);
  270.       var1.write(var2);
  271.       this.unpackRules(var2);
  272.    }
  273.  
  274.    private void readObject(ObjectInputStream var1) throws IOException, ClassNotFoundException {
  275.       var1.defaultReadObject();
  276.       if (this.serialVersionOnStream < 1) {
  277.          if (this.startDayOfWeek == 0) {
  278.             this.startDayOfWeek = 1;
  279.          }
  280.  
  281.          if (this.endDayOfWeek == 0) {
  282.             this.endDayOfWeek = 1;
  283.          }
  284.  
  285.          this.startMode = this.endMode = 2;
  286.          this.dstSavings = 3600000;
  287.       } else {
  288.          int var2 = var1.readInt();
  289.          byte[] var3 = new byte[var2];
  290.          var1.readFully(var3);
  291.          this.unpackRules(var3);
  292.       }
  293.  
  294.       this.serialVersionOnStream = 1;
  295.    }
  296. }
  297.