home *** CD-ROM | disk | FTP | other *** search
/ Popular Software (Premium Edition) / mycd.iso / INTERNET / NETSCAP4.06 / CP32E406.EXE / nav40.z / java40.jar / java / util / GregorianCalendar.class (.txt) < prev    next >
Encoding:
Java Class File  |  1998-08-13  |  10.4 KB  |  731 lines

  1. package java.util;
  2.  
  3. public class GregorianCalendar extends Calendar {
  4.    // $FF: renamed from: BC int
  5.    public static final int field_0 = 0;
  6.    // $FF: renamed from: AD int
  7.    public static final int field_1 = 1;
  8.    private static final long julianDayOffset = 2440588L;
  9.    private static final int millisPerDay = 86400000;
  10.    private static final int[] NUM_DAYS = new int[]{0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334};
  11.    private static final int[] LEAP_NUM_DAYS = new int[]{0, 31, 60, 91, 121, 152, 182, 213, 244, 274, 305, 335};
  12.    private static final int[] MONTH_LENGTH = new int[]{31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
  13.    private static final int[] LEAP_MONTH_LENGTH = new int[]{31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
  14.    private long gregorianCutover;
  15.    private static long JULIAN_ONSET = -62893584000000L;
  16.    private static long EARLIEST_USABLE_MILLIS = -210993120000000L;
  17.    private static int EARLIEST_USABLE_YEAR = 4716;
  18.    private static final int[] MinValues = new int[]{0, 1, 0, 0, 0, 1, 1, 1, -1, 0, 0, 0, 0, 0, 0, -43200000, 0};
  19.    private static final int[] GreatestMinValues = new int[]{0, 1, 0, 0, 0, 1, 1, 1, -1, 0, 0, 0, 0, 0, 0, -43200000, 0};
  20.    private static final int[] LeastMaxValues = new int[]{1, 5000000, 11, 53, 4, 28, 365, 7, 4, 1, 11, 23, 59, 59, 999, 43200000, 3600000};
  21.    private static final int[] MaxValues = new int[]{1, 5000000, 11, 54, 6, 31, 366, 7, 6, 1, 12, 23, 59, 59, 999, 43200000, 3600000};
  22.    private static final long ONE_SECOND = 1000L;
  23.    private static final long ONE_MINUTE = 60000L;
  24.    private static final long ONE_HOUR = 3600000L;
  25.    private static final long ONE_DAY = 86400000L;
  26.    private static final long ONE_WEEK = 604800000L;
  27.    static final long serialVersionUID = -8125100834729963327L;
  28.  
  29.    private static final long millisToJulianDay(long var0) {
  30.       return var0 >= 0L ? 2440588L + var0 / 86400000L : 2440588L + (var0 - 86400000L + 1L) / 86400000L;
  31.    }
  32.  
  33.    private static final long julianDayToMillis(long var0) {
  34.       return (var0 - 2440588L) * 86400000L;
  35.    }
  36.  
  37.    public GregorianCalendar() {
  38.       this(TimeZone.getDefault(), Locale.getDefault());
  39.    }
  40.  
  41.    public GregorianCalendar(TimeZone var1) {
  42.       this(var1, Locale.getDefault());
  43.    }
  44.  
  45.    public GregorianCalendar(Locale var1) {
  46.       this(TimeZone.getDefault(), var1);
  47.    }
  48.  
  49.    public GregorianCalendar(TimeZone var1, Locale var2) {
  50.       super(var1, var2);
  51.       this.gregorianCutover = -12219292800000L;
  52.       ((Calendar)this).setTimeInMillis(System.currentTimeMillis());
  53.    }
  54.  
  55.    public GregorianCalendar(int var1, int var2, int var3) {
  56.       super(TimeZone.getDefault(), Locale.getDefault());
  57.       this.gregorianCutover = -12219292800000L;
  58.       ((Calendar)this).set(0, 1);
  59.       ((Calendar)this).set(1, var1);
  60.       ((Calendar)this).set(2, var2);
  61.       ((Calendar)this).set(5, var3);
  62.    }
  63.  
  64.    public GregorianCalendar(int var1, int var2, int var3, int var4, int var5) {
  65.       super(TimeZone.getDefault(), Locale.getDefault());
  66.       this.gregorianCutover = -12219292800000L;
  67.       ((Calendar)this).set(0, 1);
  68.       ((Calendar)this).set(1, var1);
  69.       ((Calendar)this).set(2, var2);
  70.       ((Calendar)this).set(5, var3);
  71.       ((Calendar)this).set(11, var4);
  72.       ((Calendar)this).set(12, var5);
  73.    }
  74.  
  75.    public GregorianCalendar(int var1, int var2, int var3, int var4, int var5, int var6) {
  76.       super(TimeZone.getDefault(), Locale.getDefault());
  77.       this.gregorianCutover = -12219292800000L;
  78.       ((Calendar)this).set(0, 1);
  79.       ((Calendar)this).set(1, var1);
  80.       ((Calendar)this).set(2, var2);
  81.       ((Calendar)this).set(5, var3);
  82.       ((Calendar)this).set(11, var4);
  83.       ((Calendar)this).set(12, var5);
  84.       ((Calendar)this).set(13, var6);
  85.    }
  86.  
  87.    public void setGregorianChange(Date var1) {
  88.       this.gregorianCutover = var1.getTime();
  89.    }
  90.  
  91.    public final Date getGregorianChange() {
  92.       return new Date(this.gregorianCutover);
  93.    }
  94.  
  95.    private static final int julianDayToDayOfWeek(long var0) {
  96.       int var2 = (int)((var0 + 1L) % 7L);
  97.       return var2 + (var2 < 0 ? 8 : 1);
  98.    }
  99.  
  100.    private final void timeToFields(long var1) {
  101.       byte var8 = 1;
  102.       if (var1 < EARLIEST_USABLE_MILLIS) {
  103.          throw new IllegalArgumentException("GregorianCalendar does not handle dates before 4716 BC");
  104.       } else {
  105.          long var19 = millisToJulianDay(var1);
  106.          long var9;
  107.          if (var1 >= this.gregorianCutover) {
  108.             long var21 = (long)(((double)(var19 - 1867216L) - (double)0.25F) / (double)36524.25F);
  109.             var9 = var19 + 1L + var21 - (long)((double)0.25F * (double)var21);
  110.          } else {
  111.             var9 = var19;
  112.          }
  113.  
  114.          long var11 = var9 + 1524L;
  115.          long var15 = (long)((double)6680.0F + ((double)(var11 - 2439870L) - 122.10000000000001) / (double)365.25F);
  116.          long var13 = (long)((double)(365L * var15) + (double)0.25F * (double)var15);
  117.          long var17 = (long)((double)(var11 - var13) / 30.6001);
  118.          int var5 = (int)(var11 - var13 - (long)(30.6001 * (double)var17));
  119.          int var4 = (int)var17 - 1;
  120.          if (var4 > 12) {
  121.             var4 -= 12;
  122.          }
  123.  
  124.          int var3 = (int)(var15 - 4715L);
  125.          if (var4 > 2) {
  126.             --var3;
  127.          }
  128.  
  129.          if (var3 <= 0) {
  130.             var8 = 0;
  131.             var3 = 1 - var3;
  132.          }
  133.  
  134.          ((Calendar)this).internalSet(0, var8);
  135.          ((Calendar)this).internalSet(1, var3);
  136.          ((Calendar)this).internalSet(2, var4 - 1);
  137.          ((Calendar)this).internalSet(5, var5);
  138.          int var6 = julianDayToDayOfWeek(var19);
  139.          ((Calendar)this).internalSet(7, var6);
  140.          int var7;
  141.          if (this.isLeapYear(var3)) {
  142.             var7 = LEAP_NUM_DAYS[var4 - 1] + var5;
  143.          } else {
  144.             var7 = NUM_DAYS[var4 - 1] + var5;
  145.          }
  146.  
  147.          ((Calendar)this).internalSet(6, var7);
  148.          ((Calendar)this).internalSet(3, this.weekNumber(var7, var6));
  149.          ((Calendar)this).internalSet(4, this.weekNumber(var5, var6));
  150.          ((Calendar)this).internalSet(8, (var5 - 1) / 7 + 1);
  151.       }
  152.    }
  153.  
  154.    private int weekNumber(int var1, int var2) {
  155.       int var3 = (var2 - ((Calendar)this).getFirstDayOfWeek() - var1 + 1) % 7;
  156.       if (var3 < 0) {
  157.          var3 += 7;
  158.       }
  159.  
  160.       int var4 = (var1 + var3 - 1) / 7;
  161.       if (7 - var3 >= ((Calendar)this).getMinimalDaysInFirstWeek()) {
  162.          ++var4;
  163.       }
  164.  
  165.       return var4;
  166.    }
  167.  
  168.    public boolean isLeapYear(int var1) {
  169.       long var2 = (long)((double)(var1 - 1970) * 365.2422 * (double)8.64E7F);
  170.       if (var2 < JULIAN_ONSET) {
  171.          return false;
  172.       } else if (var2 <= this.gregorianCutover) {
  173.          return var1 % 4 == 0;
  174.       } else {
  175.          return var1 % 4 == 0 && (var1 % 100 != 0 || var1 % 400 == 0);
  176.       }
  177.    }
  178.  
  179.    protected void computeFields() {
  180.       if (!super.areFieldsSet) {
  181.          int var1 = ((Calendar)this).getTimeZone().getRawOffset();
  182.          long var2 = super.time + (long)var1;
  183.          this.timeToFields(var2);
  184.          int var4 = ((Calendar)this).internalGet(0);
  185.          int var5 = ((Calendar)this).internalGet(1);
  186.          int var6 = ((Calendar)this).internalGet(2);
  187.          int var7 = ((Calendar)this).internalGet(5);
  188.          int var8 = ((Calendar)this).internalGet(7);
  189.          long var9 = var2 / 86400000L;
  190.          int var11 = (int)(var2 - var9 * 86400000L);
  191.          if (var11 < 0) {
  192.             var11 += 86400000;
  193.          }
  194.  
  195.          int var12 = ((Calendar)this).getTimeZone().getOffset(var4, var5, var6, var7, var8, var11) - var1;
  196.          var11 += var12;
  197.          if (var11 >= 86400000) {
  198.             var11 -= 86400000;
  199.             var2 += (long)var12;
  200.             this.timeToFields(var2);
  201.          }
  202.  
  203.          ((Calendar)this).internalSet(14, var11 % 1000);
  204.          var11 /= 1000;
  205.          ((Calendar)this).internalSet(13, var11 % 60);
  206.          var11 /= 60;
  207.          ((Calendar)this).internalSet(12, var11 % 60);
  208.          var11 /= 60;
  209.          ((Calendar)this).internalSet(11, var11);
  210.          ((Calendar)this).internalSet(9, var11 / 12);
  211.          ((Calendar)this).internalSet(10, var11 % 12);
  212.          ((Calendar)this).internalSet(15, var1);
  213.          ((Calendar)this).internalSet(16, var12);
  214.          super.userSetZoneOffset = false;
  215.          super.userSetDSTOffset = false;
  216.          super.areFieldsSet = true;
  217.          super.areAllFieldsSet = true;
  218.  
  219.          for(int var13 = 0; var13 < 17; ++var13) {
  220.             super.isSet[var13] = true;
  221.          }
  222.  
  223.       }
  224.    }
  225.  
  226.    boolean inDaylightTime() {
  227.       if (!((Calendar)this).getTimeZone().useDaylightTime()) {
  228.          return false;
  229.       } else {
  230.          ((Calendar)this).complete();
  231.          return ((Calendar)this).internalGet(16) != 0;
  232.       }
  233.    }
  234.  
  235.    private final int monthLength(int var1, int var2) {
  236.       return this.isLeapYear(var2) ? LEAP_MONTH_LENGTH[var1] : MONTH_LENGTH[var1];
  237.    }
  238.  
  239.    private boolean validateFields() {
  240.       for(int var1 = 0; var1 < 17; ++var1) {
  241.          if (var1 != 5 && var1 != 6 && ((Calendar)this).isSet(var1) && !this.boundsCheck(((Calendar)this).internalGet(var1), var1)) {
  242.             return false;
  243.          }
  244.       }
  245.  
  246.       if (((Calendar)this).isSet(5)) {
  247.          int var4 = ((Calendar)this).internalGet(5);
  248.          return var4 >= this.getMinimum(5) && var4 <= this.monthLength(((Calendar)this).internalGet(2), ((Calendar)this).internalGet(1));
  249.       } else {
  250.          if (((Calendar)this).isSet(6)) {
  251.             int var2 = ((Calendar)this).internalGet(6);
  252.             if (this.isLeapYear(((Calendar)this).internalGet(1))) {
  253.                if (var2 < 1 || var2 > 366) {
  254.                   return false;
  255.                }
  256.             } else if (var2 < 1 || var2 > 365) {
  257.                return false;
  258.             }
  259.          }
  260.  
  261.          if (((Calendar)this).isSet(1)) {
  262.             int var3 = ((Calendar)this).internalGet(1);
  263.             if (!((Calendar)this).isSet(0) || ((Calendar)this).internalGet(0) == 1) {
  264.                var3 = 1 - var3;
  265.             }
  266.  
  267.             if (var3 > EARLIEST_USABLE_YEAR) {
  268.                return false;
  269.             }
  270.          }
  271.  
  272.          if (((Calendar)this).isSet(8) && ((Calendar)this).internalGet(8) == 0) {
  273.             return false;
  274.          } else {
  275.             return true;
  276.          }
  277.       }
  278.    }
  279.  
  280.    private boolean boundsCheck(int var1, int var2) {
  281.       return var1 >= this.getMinimum(var2) && var1 <= this.getMaximum(var2);
  282.    }
  283.  
  284.    protected void computeTime() {
  285.       if (!super.isTimeSet) {
  286.          super.areFieldsSet = !((Calendar)this).isLenient() && super.areAllFieldsSet;
  287.          if (!((Calendar)this).isLenient() && !this.validateFields()) {
  288.             throw new IllegalArgumentException();
  289.          } else {
  290.             long var1 = 0L;
  291.             int var3;
  292.             if (((Calendar)this).isSet(0)) {
  293.                var3 = ((Calendar)this).internalGet(0);
  294.             } else {
  295.                var3 = 1;
  296.             }
  297.  
  298.             if (var3 >= 0 && var3 <= 1) {
  299.                int var4 = ((Calendar)this).internalGet(1);
  300.                int var5 = 0;
  301.                int var6 = 0;
  302.                if (var3 == 0) {
  303.                   var4 = 1 - var4;
  304.                }
  305.  
  306.                long var7 = 0L;
  307.                if (!((Calendar)this).isSet(2) || !((Calendar)this).isSet(5) && (!((Calendar)this).isSet(7) || !((Calendar)this).isSet(4) && !((Calendar)this).isSet(8))) {
  308.                   if (!((Calendar)this).isSet(6) && (!((Calendar)this).isSet(7) || !((Calendar)this).isSet(3))) {
  309.                      throw new IllegalArgumentException();
  310.                   }
  311.  
  312.                   --var4;
  313.                   var7 = (long)(Math.floor((double)365.25F * (double)var4) + (double)428.0F + (double)1720995.0F);
  314.                   if (((Calendar)this).isSet(6)) {
  315.                      var7 += (long)((Calendar)this).internalGet(6);
  316.                   } else {
  317.                      long var24 = var7;
  318.                      if (julianDayToMillis(var7) >= this.gregorianCutover) {
  319.                         long var35 = (long)(0.01 * (double)var4);
  320.                         var24 = var7 + 2L - var35 + (long)((double)0.25F * (double)var35);
  321.                      }
  322.  
  323.                      int var36 = julianDayToDayOfWeek(var24 + 1L) - ((Calendar)this).getFirstDayOfWeek();
  324.                      if (var36 < 0) {
  325.                         var36 += 7;
  326.                      }
  327.  
  328.                      var6 = 1 - var36 + ((Calendar)this).internalGet(7) - ((Calendar)this).getFirstDayOfWeek();
  329.                      if (7 - var36 < ((Calendar)this).getMinimalDaysInFirstWeek()) {
  330.                         var6 += 7;
  331.                      }
  332.  
  333.                      var6 += 7 * (((Calendar)this).internalGet(3) - 1);
  334.                      var7 += (long)var6;
  335.                   }
  336.                } else {
  337.                   var5 = ((Calendar)this).internalGet(2) + 1;
  338.                   if (var5 < 1) {
  339.                      var4 += var5 / 12 - 1;
  340.                      var5 = 12 + var5 % 12;
  341.                   } else if (var5 > 12) {
  342.                      var4 += var5 / 12;
  343.                      var5 %= 12;
  344.                   }
  345.  
  346.                   if (var5 > 2) {
  347.                      ++var5;
  348.                   } else {
  349.                      --var4;
  350.                      var5 += 13;
  351.                   }
  352.  
  353.                   var7 = (long)(Math.floor((double)365.25F * (double)var4) + Math.floor(30.6001 * (double)var5) + (double)1720995.0F);
  354.                   if (((Calendar)this).isSet(5)) {
  355.                      var6 = ((Calendar)this).internalGet(5);
  356.                   } else {
  357.                      long var9 = var7;
  358.                      if (julianDayToMillis(var7) >= this.gregorianCutover) {
  359.                         long var11 = (long)(0.01 * (double)var4);
  360.                         var9 = var7 + 2L - var11 + (long)((double)0.25F * (double)var11);
  361.                      }
  362.  
  363.                      int var34 = julianDayToDayOfWeek(var9 + 1L) - ((Calendar)this).getFirstDayOfWeek();
  364.                      if (var34 < 0) {
  365.                         var34 += 7;
  366.                      }
  367.  
  368.                      var6 = 1 - var34 + ((Calendar)this).internalGet(7) - ((Calendar)this).getFirstDayOfWeek();
  369.                      if (((Calendar)this).isSet(4)) {
  370.                         if (7 - var34 < ((Calendar)this).getMinimalDaysInFirstWeek()) {
  371.                            var6 += 7;
  372.                         }
  373.  
  374.                         var6 += 7 * (((Calendar)this).internalGet(4) - 1);
  375.                      } else {
  376.                         if (var6 < 1) {
  377.                            var6 += 7;
  378.                         }
  379.  
  380.                         int var12 = ((Calendar)this).internalGet(8);
  381.                         if (var12 >= 0) {
  382.                            var6 += 7 * (var12 - 1);
  383.                         } else {
  384.                            var6 += ((this.monthLength(((Calendar)this).internalGet(2), var4) - var6) / 7 + var12 + 1) * 7;
  385.                         }
  386.                      }
  387.                   }
  388.  
  389.                   var7 += (long)var6;
  390.                }
  391.  
  392.                var1 = julianDayToMillis(var7);
  393.                if (var1 >= this.gregorianCutover) {
  394.                   long var25 = (long)(0.01 * (double)var4);
  395.                   var7 += 2L - var25 + (long)((double)0.25F * (double)var25);
  396.                   var1 = julianDayToMillis(var7);
  397.                }
  398.  
  399.                int var26 = 0;
  400.                if (((Calendar)this).isSet(11)) {
  401.                   var26 += ((Calendar)this).internalGet(11);
  402.                } else if (((Calendar)this).isSet(10)) {
  403.                   var26 += ((Calendar)this).internalGet(10);
  404.                   var26 += 12 * ((Calendar)this).internalGet(9);
  405.                }
  406.  
  407.                var26 *= 60;
  408.                var26 += ((Calendar)this).internalGet(12);
  409.                var26 *= 60;
  410.                var26 += ((Calendar)this).internalGet(13);
  411.                var26 *= 1000;
  412.                var26 += ((Calendar)this).internalGet(14);
  413.                TimeZone var10 = ((Calendar)this).getTimeZone();
  414.                int var37 = ((Calendar)this).isSet(15) && super.userSetZoneOffset ? ((Calendar)this).internalGet(15) : var10.getRawOffset();
  415.                var1 += (long)var26;
  416.                int var38 = 0;
  417.                if (((Calendar)this).isSet(16) && super.userSetDSTOffset) {
  418.                   var38 = ((Calendar)this).internalGet(16);
  419.                } else {
  420.                   if (!((Calendar)this).isSet(2) || !((Calendar)this).isSet(5)) {
  421.                      this.timeToFields(var1);
  422.                   }
  423.  
  424.                   var38 = var10.getOffset(var3, ((Calendar)this).internalGet(1), ((Calendar)this).internalGet(2), ((Calendar)this).internalGet(5), julianDayToDayOfWeek(var7), var26) - var37;
  425.                }
  426.  
  427.                super.time = var1 - (long)var37 - (long)var38;
  428.                super.isTimeSet = true;
  429.             } else {
  430.                throw new IllegalArgumentException();
  431.             }
  432.          }
  433.       }
  434.    }
  435.  
  436.    public synchronized int hashCode() {
  437.       return ((Calendar)this).getFirstDayOfWeek() ^ ((Calendar)this).getMinimalDaysInFirstWeek();
  438.    }
  439.  
  440.    public boolean equals(Object var1) {
  441.       if (this == var1) {
  442.          return true;
  443.       } else if (!(var1 instanceof GregorianCalendar)) {
  444.          return false;
  445.       } else {
  446.          GregorianCalendar var2 = (GregorianCalendar)var1;
  447.          return ((Calendar)this).getTimeInMillis() == ((Calendar)var2).getTimeInMillis() && ((Calendar)this).isLenient() == ((Calendar)var2).isLenient() && ((Calendar)this).getFirstDayOfWeek() == ((Calendar)var2).getFirstDayOfWeek() && ((Calendar)this).getMinimalDaysInFirstWeek() == ((Calendar)var2).getMinimalDaysInFirstWeek() && ((Calendar)this).getTimeZone().equals(((Calendar)var2).getTimeZone());
  448.       }
  449.    }
  450.  
  451.    public boolean before(Object var1) {
  452.       if (this != var1 && var1 != null && var1 instanceof GregorianCalendar) {
  453.          GregorianCalendar var2 = (GregorianCalendar)var1;
  454.          return ((Calendar)this).getTimeInMillis() < ((Calendar)var2).getTimeInMillis();
  455.       } else {
  456.          return false;
  457.       }
  458.    }
  459.  
  460.    public boolean after(Object var1) {
  461.       if (this != var1 && var1 != null && var1 instanceof GregorianCalendar) {
  462.          GregorianCalendar var2 = (GregorianCalendar)var1;
  463.          return ((Calendar)this).getTimeInMillis() > ((Calendar)var2).getTimeInMillis();
  464.       } else {
  465.          return false;
  466.       }
  467.    }
  468.  
  469.    public void add(int var1, int var2) {
  470.       if (var2 != 0) {
  471.          ((Calendar)this).complete();
  472.          if (var1 == 1) {
  473.             int var11 = ((Calendar)this).internalGet(1);
  474.             if (((Calendar)this).internalGet(0) == 1) {
  475.                var11 += var2;
  476.                if (var11 > 0) {
  477.                   ((Calendar)this).set(1, var11);
  478.                } else {
  479.                   ((Calendar)this).set(1, 1 - var11);
  480.                   ((Calendar)this).set(0, 0);
  481.                }
  482.             } else {
  483.                var11 -= var2;
  484.                if (var11 > 0) {
  485.                   ((Calendar)this).set(1, var11);
  486.                } else {
  487.                   ((Calendar)this).set(1, 1 - var11);
  488.                   ((Calendar)this).set(0, 1);
  489.                }
  490.             }
  491.          } else if (var1 == 2) {
  492.             int var9 = ((Calendar)this).internalGet(2) + var2;
  493.             if (var9 >= 0) {
  494.                this.add(1, var9 / 12);
  495.                ((Calendar)this).set(2, var9 % 12);
  496.             } else {
  497.                this.add(1, (var9 + 1) / 12 - 1);
  498.                var9 %= 12;
  499.                if (var9 < 0) {
  500.                   var9 += 12;
  501.                }
  502.  
  503.                ((Calendar)this).set(2, var9);
  504.             }
  505.          } else if (var1 == 0) {
  506.             int var8 = ((Calendar)this).internalGet(0) + var2;
  507.             if (var8 < 0) {
  508.                var8 = 0;
  509.             }
  510.  
  511.             if (var8 > 1) {
  512.                var8 = 1;
  513.             }
  514.  
  515.             ((Calendar)this).set(0, var8);
  516.          } else {
  517.             long var3 = (long)((Calendar)this).internalGet(16);
  518.             long var5 = (long)var2;
  519.             switch (var1) {
  520.                case 3:
  521.                case 4:
  522.                case 8:
  523.                   var5 *= 604800000L;
  524.                   break;
  525.                case 5:
  526.                case 6:
  527.                case 7:
  528.                   var5 *= 86400000L;
  529.                   break;
  530.                case 9:
  531.                   var5 *= 43200000L;
  532.                   break;
  533.                case 10:
  534.                case 11:
  535.                   var5 *= 3600000L;
  536.                   break;
  537.                case 12:
  538.                   var5 *= 60000L;
  539.                   break;
  540.                case 13:
  541.                   var5 *= 1000L;
  542.                case 14:
  543.                   break;
  544.                case 15:
  545.                case 16:
  546.                default:
  547.                   throw new IllegalArgumentException();
  548.             }
  549.  
  550.             ((Calendar)this).setTimeInMillis(super.time + var5);
  551.             var3 -= (long)((Calendar)this).internalGet(16);
  552.             if (var5 != 0L) {
  553.                ((Calendar)this).setTimeInMillis(super.time + var3);
  554.             }
  555.  
  556.          }
  557.       }
  558.    }
  559.  
  560.    public void roll(int var1, boolean var2) {
  561.       this.roll(var1, var2 ? 1 : -1);
  562.    }
  563.  
  564.    void roll(int var1, int var2) {
  565.       if (var2 != 0) {
  566.          ((Calendar)this).complete();
  567.          int var3 = this.getMinimum(var1);
  568.          int var4 = this.getMaximum(var1);
  569.          switch (var1) {
  570.             case 3:
  571.                int var19 = ((Calendar)this).internalGet(7) - ((Calendar)this).getFirstDayOfWeek();
  572.                if (var19 < 0) {
  573.                   var19 += 7;
  574.                }
  575.  
  576.                int var23 = (var19 - ((Calendar)this).internalGet(6) + 1) % 7;
  577.                if (var23 < 0) {
  578.                   var23 += 7;
  579.                }
  580.  
  581.                int var27;
  582.                if (7 - var23 < ((Calendar)this).getMinimalDaysInFirstWeek()) {
  583.                   var27 = 8 - var23;
  584.                } else {
  585.                   var27 = 1 - var23;
  586.                }
  587.  
  588.                int var30 = this.isLeapYear(((Calendar)this).internalGet(1)) ? 366 : 365;
  589.                int var33 = (var30 - ((Calendar)this).internalGet(6) + var19) % 7;
  590.                int var34 = var30 + 7 - var33;
  591.                int var14 = var34 - var27;
  592.                int var37 = (((Calendar)this).internalGet(6) + var2 * 7 - var27) % var14;
  593.                if (var37 < 0) {
  594.                   var37 += var14;
  595.                }
  596.  
  597.                var37 += var27;
  598.                if (var37 < 1) {
  599.                   var37 = 1;
  600.                }
  601.  
  602.                if (var37 > var30) {
  603.                   var37 = var30;
  604.                }
  605.  
  606.                ((Calendar)this).set(6, var37);
  607.                ((Calendar)this).clear(2);
  608.                return;
  609.             case 4:
  610.                int var18 = ((Calendar)this).internalGet(7) - ((Calendar)this).getFirstDayOfWeek();
  611.                if (var18 < 0) {
  612.                   var18 += 7;
  613.                }
  614.  
  615.                int var7 = (var18 - ((Calendar)this).internalGet(5) + 1) % 7;
  616.                if (var7 < 0) {
  617.                   var7 += 7;
  618.                }
  619.  
  620.                int var26;
  621.                if (7 - var7 < ((Calendar)this).getMinimalDaysInFirstWeek()) {
  622.                   var26 = 8 - var7;
  623.                } else {
  624.                   var26 = 1 - var7;
  625.                }
  626.  
  627.                int var29 = this.monthLength(((Calendar)this).internalGet(2), ((Calendar)this).internalGet(1));
  628.                int var32 = (var29 - ((Calendar)this).internalGet(5) + var18) % 7;
  629.                int var11 = var29 + 7 - var32;
  630.                int var5 = var11 - var26;
  631.                int var35 = (((Calendar)this).internalGet(5) + var2 * 7 - var26) % var5;
  632.                if (var35 < 0) {
  633.                   var35 += var5;
  634.                }
  635.  
  636.                var35 += var26;
  637.                if (var35 < 1) {
  638.                   var35 = 1;
  639.                }
  640.  
  641.                if (var35 > var29) {
  642.                   var35 = var29;
  643.                }
  644.  
  645.                ((Calendar)this).set(5, var35);
  646.                return;
  647.             case 5:
  648.                var4 = this.monthLength(((Calendar)this).internalGet(2), ((Calendar)this).internalGet(1));
  649.             case 0:
  650.             case 1:
  651.             case 2:
  652.             case 9:
  653.             case 10:
  654.             case 11:
  655.             case 12:
  656.             case 13:
  657.             case 14:
  658.                int var15 = var4 - var3 + 1;
  659.                int var20 = ((Calendar)this).internalGet(var1) + var2;
  660.                var20 = (var20 - var3) % var15;
  661.                if (var20 < 0) {
  662.                   var20 += var15;
  663.                }
  664.  
  665.                var20 += var3;
  666.                ((Calendar)this).set(var1, var20);
  667.                return;
  668.             case 6:
  669.                long var17 = (long)var2 * 86400000L;
  670.                long var25 = super.time - (long)(((Calendar)this).internalGet(6) - 1) * 86400000L;
  671.                int var31 = this.isLeapYear(((Calendar)this).internalGet(1)) ? 366 : 365;
  672.                super.time = (super.time + var17 - var25) % ((long)var31 * 86400000L);
  673.                if (super.time < 0L) {
  674.                   super.time += (long)var31 * 86400000L;
  675.                }
  676.  
  677.                ((Calendar)this).setTimeInMillis(super.time + var25);
  678.                return;
  679.             case 7:
  680.                long var16 = (long)var2 * 86400000L;
  681.                int var24 = ((Calendar)this).internalGet(7) - ((Calendar)this).getFirstDayOfWeek();
  682.                if (var24 < 0) {
  683.                   var24 += 7;
  684.                }
  685.  
  686.                long var28 = super.time - (long)var24 * 86400000L;
  687.                super.time = (super.time + var16 - var28) % 604800000L;
  688.                if (super.time < 0L) {
  689.                   super.time += 604800000L;
  690.                }
  691.  
  692.                ((Calendar)this).setTimeInMillis(super.time + var28);
  693.                return;
  694.             case 8:
  695.                long var6 = (long)var2 * 604800000L;
  696.                int var8 = (((Calendar)this).internalGet(5) - 1) / 7;
  697.                int var9 = (this.monthLength(((Calendar)this).internalGet(2), ((Calendar)this).internalGet(1)) - ((Calendar)this).internalGet(5)) / 7;
  698.                long var10 = super.time - (long)var8 * 604800000L;
  699.                long var12 = 604800000L * (long)(var8 + var9 + 1);
  700.                super.time = (super.time + var6 - var10) % var12;
  701.                if (super.time < 0L) {
  702.                   super.time += var12;
  703.                }
  704.  
  705.                ((Calendar)this).setTimeInMillis(super.time + var10);
  706.                return;
  707.             case 15:
  708.             case 16:
  709.             default:
  710.                throw new IllegalArgumentException();
  711.          }
  712.       }
  713.    }
  714.  
  715.    public int getMinimum(int var1) {
  716.       return MinValues[var1];
  717.    }
  718.  
  719.    public int getMaximum(int var1) {
  720.       return MaxValues[var1];
  721.    }
  722.  
  723.    public int getGreatestMinimum(int var1) {
  724.       return GreatestMinValues[var1];
  725.    }
  726.  
  727.    public int getLeastMaximum(int var1) {
  728.       return LeastMaxValues[var1];
  729.    }
  730. }
  731.