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