home *** CD-ROM | disk | FTP | other *** search
/ S283 Planetary Science &n…he Search for Life DVD 2 / DVD-ROM.iso / install / jre1_3 / lib / rt.jar / java / text / SimpleDateFormat.class (.txt) < prev    next >
Encoding:
Java Class File  |  1979-12-31  |  10.2 KB  |  756 lines

  1. package java.text;
  2.  
  3. import java.io.IOException;
  4. import java.io.ObjectInputStream;
  5. import java.util.Calendar;
  6. import java.util.Date;
  7. import java.util.Hashtable;
  8. import java.util.Locale;
  9. import java.util.ResourceBundle;
  10. import java.util.SimpleTimeZone;
  11. import java.util.TimeZone;
  12.  
  13. public class SimpleDateFormat extends DateFormat {
  14.    static final long serialVersionUID = 4774881970558875024L;
  15.    static final int currentSerialVersion = 1;
  16.    private int serialVersionOnStream;
  17.    private String pattern;
  18.    private DateFormatSymbols formatData;
  19.    private Date defaultCenturyStart;
  20.    private transient int defaultCenturyStartYear;
  21.    private static final int millisPerHour = 3600000;
  22.    private static final int millisPerMinute = 60000;
  23.    private static final String GMT_PLUS = "GMT+";
  24.    private static final String GMT_MINUS = "GMT-";
  25.    private static final String GMT = "GMT";
  26.    private static Hashtable cachedLocaleData = new Hashtable(3);
  27.    private static final int[] PATTERN_INDEX_TO_CALENDAR_FIELD = new int[]{0, 1, 2, 5, 11, 11, 12, 13, 14, 7, 6, 8, 3, 4, 9, 10, 10, 15};
  28.    private static final int[] PATTERN_INDEX_TO_DATE_FORMAT_FIELD = new int[]{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17};
  29.  
  30.    public SimpleDateFormat() {
  31.       this(3, 3, Locale.getDefault());
  32.    }
  33.  
  34.    public SimpleDateFormat(String var1) {
  35.       this(var1, Locale.getDefault());
  36.    }
  37.  
  38.    public SimpleDateFormat(String var1, Locale var2) {
  39.       this.serialVersionOnStream = 1;
  40.       this.pattern = var1;
  41.       this.formatData = new DateFormatSymbols(var2);
  42.       this.initialize(var2);
  43.    }
  44.  
  45.    public SimpleDateFormat(String var1, DateFormatSymbols var2) {
  46.       this.serialVersionOnStream = 1;
  47.       this.pattern = var1;
  48.       this.formatData = (DateFormatSymbols)var2.clone();
  49.       this.initialize(Locale.getDefault());
  50.    }
  51.  
  52.    SimpleDateFormat(int var1, int var2, Locale var3) {
  53.       this.serialVersionOnStream = 1;
  54.       String[] var4 = (String[])cachedLocaleData.get(var3);
  55.       if (var4 == null) {
  56.          ResourceBundle var5 = ResourceBundle.getBundle("java.text.resources.LocaleElements", var3);
  57.          var4 = var5.getStringArray("DateTimePatterns");
  58.          cachedLocaleData.put(var3, var4);
  59.       }
  60.  
  61.       this.formatData = new DateFormatSymbols(var3);
  62.       if (var1 >= 0 && var2 >= 0) {
  63.          Object[] var6 = new Object[]{var4[var1], var4[var2 + 4]};
  64.          this.pattern = MessageFormat.format(var4[8], var6);
  65.       } else if (var1 >= 0) {
  66.          this.pattern = var4[var1];
  67.       } else {
  68.          if (var2 < 0) {
  69.             throw new IllegalArgumentException("No date or time style specified");
  70.          }
  71.  
  72.          this.pattern = var4[var2 + 4];
  73.       }
  74.  
  75.       this.initialize(var3);
  76.    }
  77.  
  78.    private void initialize(Locale var1) {
  79.       super.calendar = Calendar.getInstance(TimeZone.getDefault(), var1);
  80.       super.numberFormat = NumberFormat.getInstance(var1);
  81.       super.numberFormat.setGroupingUsed(false);
  82.       if (super.numberFormat instanceof DecimalFormat) {
  83.          ((DecimalFormat)super.numberFormat).setDecimalSeparatorAlwaysShown(false);
  84.       }
  85.  
  86.       super.numberFormat.setParseIntegerOnly(true);
  87.       super.numberFormat.setMinimumFractionDigits(0);
  88.       this.initializeDefaultCentury();
  89.    }
  90.  
  91.    private void initializeDefaultCentury() {
  92.       super.calendar.setTime(new Date());
  93.       super.calendar.add(1, -80);
  94.       this.parseAmbiguousDatesAsAfter(super.calendar.getTime());
  95.    }
  96.  
  97.    private void parseAmbiguousDatesAsAfter(Date var1) {
  98.       this.defaultCenturyStart = var1;
  99.       super.calendar.setTime(var1);
  100.       this.defaultCenturyStartYear = super.calendar.get(1);
  101.    }
  102.  
  103.    public void set2DigitYearStart(Date var1) {
  104.       this.parseAmbiguousDatesAsAfter(var1);
  105.    }
  106.  
  107.    public Date get2DigitYearStart() {
  108.       return this.defaultCenturyStart;
  109.    }
  110.  
  111.    public StringBuffer format(Date var1, StringBuffer var2, FieldPosition var3) {
  112.       var3.beginIndex = var3.endIndex = 0;
  113.       super.calendar.setTime(var1);
  114.       boolean var4 = false;
  115.       char var5 = 0;
  116.       int var6 = 0;
  117.  
  118.       for(int var7 = 0; var7 < this.pattern.length(); ++var7) {
  119.          char var8 = this.pattern.charAt(var7);
  120.          if (var8 != var5 && var6 > 0) {
  121.             var2.append(this.subFormat(var5, var6, var2.length(), var3));
  122.             var6 = 0;
  123.          }
  124.  
  125.          if (var8 == '\'') {
  126.             if (var7 + 1 < this.pattern.length() && this.pattern.charAt(var7 + 1) == '\'') {
  127.                var2.append('\'');
  128.                ++var7;
  129.             } else {
  130.                var4 = !var4;
  131.             }
  132.          } else if (var4 || (var8 < 'a' || var8 > 'z') && (var8 < 'A' || var8 > 'Z')) {
  133.             var2.append(var8);
  134.          } else {
  135.             var5 = var8;
  136.             ++var6;
  137.          }
  138.       }
  139.  
  140.       if (var6 > 0) {
  141.          var2.append(this.subFormat(var5, var6, var2.length(), var3));
  142.       }
  143.  
  144.       return var2;
  145.    }
  146.  
  147.    private String subFormat(char var1, int var2, int var3, FieldPosition var4) throws IllegalArgumentException {
  148.       int var5 = -1;
  149.       int var6 = Integer.MAX_VALUE;
  150.       String var7 = "";
  151.       if ((var5 = "GyMdkHmsSEDFwWahKz".indexOf(var1)) == -1) {
  152.          throw new IllegalArgumentException("Illegal pattern character '" + var1 + "'");
  153.       } else {
  154.          int var8 = PATTERN_INDEX_TO_CALENDAR_FIELD[var5];
  155.          int var9 = super.calendar.get(var8);
  156.          switch (var5) {
  157.             case 0:
  158.                var7 = this.formatData.eras[var9];
  159.                break;
  160.             case 1:
  161.                if (var2 >= 4) {
  162.                   var7 = this.zeroPaddingNumber((long)var9, 4, var6);
  163.                } else {
  164.                   var7 = this.zeroPaddingNumber((long)var9, 2, 2);
  165.                }
  166.                break;
  167.             case 2:
  168.                if (var2 >= 4) {
  169.                   var7 = this.formatData.months[var9];
  170.                } else if (var2 == 3) {
  171.                   var7 = this.formatData.shortMonths[var9];
  172.                } else {
  173.                   var7 = this.zeroPaddingNumber((long)(var9 + 1), var2, var6);
  174.                }
  175.                break;
  176.             case 3:
  177.             case 5:
  178.             case 6:
  179.             case 7:
  180.             case 8:
  181.             case 10:
  182.             case 11:
  183.             case 12:
  184.             case 13:
  185.             case 16:
  186.             default:
  187.                var7 = this.zeroPaddingNumber((long)var9, var2, var6);
  188.                break;
  189.             case 4:
  190.                if (var9 == 0) {
  191.                   var7 = this.zeroPaddingNumber((long)(super.calendar.getMaximum(11) + 1), var2, var6);
  192.                } else {
  193.                   var7 = this.zeroPaddingNumber((long)var9, var2, var6);
  194.                }
  195.                break;
  196.             case 9:
  197.                if (var2 >= 4) {
  198.                   var7 = this.formatData.weekdays[var9];
  199.                } else {
  200.                   var7 = this.formatData.shortWeekdays[var9];
  201.                }
  202.                break;
  203.             case 14:
  204.                var7 = this.formatData.ampms[var9];
  205.                break;
  206.             case 15:
  207.                if (var9 == 0) {
  208.                   var7 = this.zeroPaddingNumber((long)(super.calendar.getLeastMaximum(10) + 1), var2, var6);
  209.                } else {
  210.                   var7 = this.zeroPaddingNumber((long)var9, var2, var6);
  211.                }
  212.                break;
  213.             case 17:
  214.                int var10 = this.formatData.getZoneIndex(super.calendar.getTimeZone().getID());
  215.                if (var10 == -1) {
  216.                   StringBuffer var11 = new StringBuffer();
  217.                   var9 = super.calendar.get(15) + super.calendar.get(16);
  218.                   if (var9 < 0) {
  219.                      var11.append("GMT-");
  220.                      var9 = -var9;
  221.                   } else {
  222.                      var11.append("GMT+");
  223.                   }
  224.  
  225.                   var11.append(this.zeroPaddingNumber((long)(var9 / 3600000), 2, 2));
  226.                   var11.append(':');
  227.                   var11.append(this.zeroPaddingNumber((long)(var9 % 3600000 / '\uea60'), 2, 2));
  228.                   var7 = var11.toString();
  229.                } else if (super.calendar.get(16) != 0) {
  230.                   if (var2 >= 4) {
  231.                      var7 = this.formatData.zoneStrings[var10][3];
  232.                   } else {
  233.                      var7 = this.formatData.zoneStrings[var10][4];
  234.                   }
  235.                } else if (var2 >= 4) {
  236.                   var7 = this.formatData.zoneStrings[var10][1];
  237.                } else {
  238.                   var7 = this.formatData.zoneStrings[var10][2];
  239.                }
  240.          }
  241.  
  242.          if (var4.field == PATTERN_INDEX_TO_DATE_FORMAT_FIELD[var5] && var4.beginIndex == 0 && var4.endIndex == 0) {
  243.             var4.beginIndex = var3;
  244.             var4.endIndex = var3 + var7.length();
  245.          }
  246.  
  247.          return var7;
  248.       }
  249.    }
  250.  
  251.    private String zeroPaddingNumber(long var1, int var3, int var4) {
  252.       super.numberFormat.setMinimumIntegerDigits(var3);
  253.       super.numberFormat.setMaximumIntegerDigits(var4);
  254.       return super.numberFormat.format(var1);
  255.    }
  256.  
  257.    public Date parse(String var1, ParsePosition var2) {
  258.       int var14 = var2.index;
  259.       int var4 = var14;
  260.       boolean[] var5 = new boolean[]{false};
  261.       super.calendar.clear();
  262.       boolean var6 = false;
  263.       char var7 = 0;
  264.       int var8 = 0;
  265.       int var9 = 1;
  266.  
  267.       for(int var10 = 0; var10 < this.pattern.length(); ++var10) {
  268.          char var11 = this.pattern.charAt(var10);
  269.          if (var6) {
  270.             if (var11 == '\'') {
  271.                var6 = false;
  272.                if (var8 == 0) {
  273.                   if (var14 >= var1.length() || var11 != var1.charAt(var14)) {
  274.                      var2.index = var4;
  275.                      var2.errorIndex = var14;
  276.                      return null;
  277.                   }
  278.  
  279.                   ++var14;
  280.                }
  281.  
  282.                var8 = 0;
  283.                var9 = 0;
  284.             } else {
  285.                if (var14 >= var1.length() || var11 != var1.charAt(var14)) {
  286.                   var2.index = var4;
  287.                   var2.errorIndex = var14;
  288.                   return null;
  289.                }
  290.  
  291.                ++var8;
  292.                ++var14;
  293.             }
  294.          } else {
  295.             if (var11 == '\'') {
  296.                var6 = true;
  297.                if (var8 > 0) {
  298.                   int var12 = var14;
  299.                   var14 = this.subParse(var1, var14, var7, var8, false, var5);
  300.                   if (var14 < 0) {
  301.                      var2.errorIndex = var12;
  302.                      var2.index = var4;
  303.                      return null;
  304.                   }
  305.  
  306.                   var8 = 0;
  307.                }
  308.  
  309.                if (var9 == 0) {
  310.                   if (var14 >= var1.length() || var11 != var1.charAt(var14)) {
  311.                      var2.errorIndex = var14;
  312.                      var2.index = var4;
  313.                      return null;
  314.                   }
  315.  
  316.                   ++var14;
  317.                   var8 = 1;
  318.                }
  319.             } else if (var11 >= 'a' && var11 <= 'z' || var11 >= 'A' && var11 <= 'Z') {
  320.                if (var11 != var7 && var8 > 0) {
  321.                   int var18 = var14;
  322.                   var14 = this.subParse(var1, var14, var7, var8, true, var5);
  323.                   if (var14 < 0) {
  324.                      var2.errorIndex = var18;
  325.                      var2.index = var4;
  326.                      return null;
  327.                   }
  328.  
  329.                   var7 = var11;
  330.                   var8 = 1;
  331.                } else {
  332.                   if (var11 != var7) {
  333.                      var7 = var11;
  334.                   }
  335.  
  336.                   ++var8;
  337.                }
  338.             } else if (var8 > 0) {
  339.                int var17 = var14;
  340.                var14 = this.subParse(var1, var14, var7, var8, false, var5);
  341.                if (var14 < 0) {
  342.                   var2.errorIndex = var17;
  343.                   var2.index = var4;
  344.                   return null;
  345.                }
  346.  
  347.                if (var14 >= var1.length() || var11 != var1.charAt(var14)) {
  348.                   var2.errorIndex = var14;
  349.                   var2.index = var4;
  350.                   return null;
  351.                }
  352.  
  353.                ++var14;
  354.                var8 = 0;
  355.                var7 = 0;
  356.             } else {
  357.                if (var14 >= var1.length() || var11 != var1.charAt(var14)) {
  358.                   var2.errorIndex = var14;
  359.                   var2.index = var4;
  360.                   return null;
  361.                }
  362.  
  363.                ++var14;
  364.             }
  365.  
  366.             ++var9;
  367.          }
  368.       }
  369.  
  370.       if (var8 > 0) {
  371.          int var15 = var14;
  372.          var14 = this.subParse(var1, var14, var7, var8, false, var5);
  373.          if (var14 < 0) {
  374.             var2.index = var4;
  375.             var2.errorIndex = var15;
  376.             return null;
  377.          }
  378.       }
  379.  
  380.       var2.index = var14;
  381.  
  382.       try {
  383.          Date var16;
  384.          if (var5[0]) {
  385.             Calendar var19 = (Calendar)super.calendar.clone();
  386.             var16 = super.calendar.getTime();
  387.             if (var16.before(this.defaultCenturyStart)) {
  388.                var19.set(1, this.defaultCenturyStartYear + 100);
  389.                var16 = var19.getTime();
  390.             }
  391.          } else {
  392.             var16 = super.calendar.getTime();
  393.          }
  394.  
  395.          return var16;
  396.       } catch (IllegalArgumentException var13) {
  397.          var2.errorIndex = var14;
  398.          var2.index = var4;
  399.          return null;
  400.       }
  401.    }
  402.  
  403.    private int matchString(String var1, int var2, int var3, String[] var4) {
  404.       int var5 = 0;
  405.       int var6 = var4.length;
  406.       if (var3 == 7) {
  407.          var5 = 1;
  408.       }
  409.  
  410.       int var7 = 0;
  411.  
  412.       int var8;
  413.       for(var8 = -1; var5 < var6; ++var5) {
  414.          int var9 = var4[var5].length();
  415.          if (var9 > var7 && var1.regionMatches(true, var2, var4[var5], 0, var9)) {
  416.             var8 = var5;
  417.             var7 = var9;
  418.          }
  419.       }
  420.  
  421.       if (var8 >= 0) {
  422.          super.calendar.set(var3, var8);
  423.          return var2 + var7;
  424.       } else {
  425.          return -var2;
  426.       }
  427.    }
  428.  
  429.    private int matchZoneString(String var1, int var2, int var3) {
  430.       int var4;
  431.       for(var4 = 1; var4 <= 4 && !var1.regionMatches(true, var2, this.formatData.zoneStrings[var3][var4], 0, this.formatData.zoneStrings[var3][var4].length()); ++var4) {
  432.       }
  433.  
  434.       return var4 > 4 ? -1 : var4;
  435.    }
  436.  
  437.    private int subParseZoneString(String var1, int var2) {
  438.       int var3 = this.formatData.getZoneIndex(((DateFormat)this).getTimeZone().getID());
  439.       TimeZone var4 = null;
  440.       int var5 = 0;
  441.       int var6 = 0;
  442.       if (var3 != -1 && (var5 = this.matchZoneString(var1, var2, var3)) > 0) {
  443.          var4 = TimeZone.getTimeZone(this.formatData.zoneStrings[var3][0]);
  444.          var6 = var3;
  445.       }
  446.  
  447.       if (var4 == null) {
  448.          var3 = this.formatData.getZoneIndex(TimeZone.getDefault().getID());
  449.          if (var3 != -1 && (var5 = this.matchZoneString(var1, var2, var3)) > 0) {
  450.             var4 = TimeZone.getTimeZone(this.formatData.zoneStrings[var3][0]);
  451.             var6 = var3;
  452.          }
  453.       }
  454.  
  455.       if (var4 == null) {
  456.          for(var6 = 0; var6 < this.formatData.zoneStrings.length; ++var6) {
  457.             if ((var5 = this.matchZoneString(var1, var2, var6)) > 0) {
  458.                var4 = TimeZone.getTimeZone(this.formatData.zoneStrings[var6][0]);
  459.                break;
  460.             }
  461.          }
  462.       }
  463.  
  464.       if (var4 != null) {
  465.          super.calendar.set(15, var4.getRawOffset());
  466.          super.calendar.set(16, var5 >= 3 ? ((SimpleTimeZone)var4).getDSTSavings() : 0);
  467.          return var2 + this.formatData.zoneStrings[var6][var5].length();
  468.       } else {
  469.          return 0;
  470.       }
  471.    }
  472.  
  473.    private int subParse(String var1, int var2, char var3, int var4, boolean var5, boolean[] var6) {
  474.       Object var7 = null;
  475.       int var8 = 0;
  476.       ParsePosition var10 = new ParsePosition(0);
  477.       int var11 = -1;
  478.       if ((var11 = "GyMdkHmsSEDFwWahKz".indexOf(var3)) == -1) {
  479.          return -var2;
  480.       } else {
  481.          var10.index = var2;
  482.  
  483.          for(int var12 = PATTERN_INDEX_TO_CALENDAR_FIELD[var11]; var10.index < var1.length(); ++var10.index) {
  484.             int var13 = var1.charAt(var10.index);
  485.             if (var13 != 32 && var13 != 9) {
  486.                if (var11 == 4 || var11 == 15 || var11 == 2 && var4 <= 2 || var11 == 1) {
  487.                   Number var18;
  488.                   if (var5) {
  489.                      if (var2 + var4 > var1.length()) {
  490.                         return -var2;
  491.                      }
  492.  
  493.                      var18 = super.numberFormat.parse(var1.substring(0, var2 + var4), var10);
  494.                   } else {
  495.                      var18 = super.numberFormat.parse(var1, var10);
  496.                   }
  497.  
  498.                   if (var18 == null) {
  499.                      return -var2;
  500.                   }
  501.  
  502.                   var8 = var18.intValue();
  503.                }
  504.  
  505.                switch (var11) {
  506.                   case 0:
  507.                      return this.matchString(var1, var2, 0, this.formatData.eras);
  508.                   case 1:
  509.                      if (var4 <= 2 && var10.index - var2 == 2 && Character.isDigit(var1.charAt(var2)) && Character.isDigit(var1.charAt(var2 + 1))) {
  510.                         var13 = this.defaultCenturyStartYear % 100;
  511.                         var6[0] = var8 == var13;
  512.                         var8 += this.defaultCenturyStartYear / 100 * 100 + (var8 < var13 ? 100 : 0);
  513.                      }
  514.  
  515.                      super.calendar.set(1, var8);
  516.                      return var10.index;
  517.                   case 2:
  518.                      if (var4 <= 2) {
  519.                         super.calendar.set(2, var8 - 1);
  520.                         return var10.index;
  521.                      }
  522.  
  523.                      var13 = 0;
  524.                      if ((var13 = this.matchString(var1, var2, 2, this.formatData.months)) > 0) {
  525.                         return var13;
  526.                      }
  527.  
  528.                      return this.matchString(var1, var2, 2, this.formatData.shortMonths);
  529.                   case 3:
  530.                   case 5:
  531.                   case 6:
  532.                   case 7:
  533.                   case 8:
  534.                   case 10:
  535.                   case 11:
  536.                   case 12:
  537.                   case 13:
  538.                   case 16:
  539.                   default:
  540.                      Number var19;
  541.                      if (var5) {
  542.                         if (var2 + var4 > var1.length()) {
  543.                            return -var2;
  544.                         }
  545.  
  546.                         var19 = super.numberFormat.parse(var1.substring(0, var2 + var4), var10);
  547.                      } else {
  548.                         var19 = super.numberFormat.parse(var1, var10);
  549.                      }
  550.  
  551.                      if (var19 != null) {
  552.                         super.calendar.set(var12, var19.intValue());
  553.                         return var10.index;
  554.                      }
  555.  
  556.                      return -var2;
  557.                   case 4:
  558.                      if (var8 == super.calendar.getMaximum(11) + 1) {
  559.                         var8 = 0;
  560.                      }
  561.  
  562.                      super.calendar.set(11, var8);
  563.                      return var10.index;
  564.                   case 9:
  565.                      var13 = (char)0;
  566.                      if ((var13 = this.matchString(var1, var2, 7, this.formatData.weekdays)) > 0) {
  567.                         return var13;
  568.                      }
  569.  
  570.                      return this.matchString(var1, var2, 7, this.formatData.shortWeekdays);
  571.                   case 14:
  572.                      return this.matchString(var1, var2, 9, this.formatData.ampms);
  573.                   case 15:
  574.                      if (var8 == super.calendar.getLeastMaximum(10) + 1) {
  575.                         var8 = 0;
  576.                      }
  577.  
  578.                      super.calendar.set(10, var8);
  579.                      return var10.index;
  580.                   case 17:
  581.                      var13 = 0;
  582.                      int var27;
  583.                      if (var1.length() - var2 >= "GMT".length() && var1.regionMatches(true, var2, "GMT", 0, "GMT".length())) {
  584.                         super.calendar.set(16, 0);
  585.                         var10.index = var2 + "GMT".length();
  586.  
  587.                         try {
  588.                            if (var1.charAt(var10.index) == '+') {
  589.                               var13 = 1;
  590.                            } else if (var1.charAt(var10.index) == '-') {
  591.                               var13 = -1;
  592.                            }
  593.                         } catch (StringIndexOutOfBoundsException var17) {
  594.                         }
  595.  
  596.                         if (var13 == 0) {
  597.                            super.calendar.set(15, 0);
  598.                            return var10.index;
  599.                         }
  600.  
  601.                         ++var10.index;
  602.                         Number var31 = super.numberFormat.parse(var1, var10);
  603.                         if (var31 == null) {
  604.                            return -var2;
  605.                         }
  606.  
  607.                         if (var1.charAt(var10.index) == ':') {
  608.                            var27 = var31.intValue() * 60;
  609.                            ++var10.index;
  610.                            var31 = super.numberFormat.parse(var1, var10);
  611.                            if (var31 == null) {
  612.                               return -var2;
  613.                            }
  614.  
  615.                            var27 += var31.intValue();
  616.                         } else {
  617.                            var27 = var31.intValue();
  618.                            if (var27 < 24) {
  619.                               var27 *= 60;
  620.                            } else {
  621.                               var27 = var27 % 100 + var27 / 100 * 60;
  622.                            }
  623.                         }
  624.                      } else {
  625.                         int var9 = this.subParseZoneString(var1, var2);
  626.                         if (var9 != 0) {
  627.                            return var9;
  628.                         }
  629.  
  630.                         DecimalFormat var15 = new DecimalFormat("+####;-####");
  631.                         ((NumberFormat)var15).setParseIntegerOnly(true);
  632.                         Number var16 = var15.parse(var1, var10);
  633.                         if (var16 == null) {
  634.                            return -var2;
  635.                         }
  636.  
  637.                         var27 = var16.intValue();
  638.                         var13 = 1;
  639.                         if (var27 < 0) {
  640.                            var13 = -1;
  641.                            var27 = -var27;
  642.                         }
  643.  
  644.                         if (var27 < 24) {
  645.                            var27 *= 60;
  646.                         } else {
  647.                            var27 = var27 % 100 + var27 / 100 * 60;
  648.                         }
  649.                      }
  650.  
  651.                      if (var13 != 0) {
  652.                         var27 *= '\uea60' * var13;
  653.                         if (super.calendar.getTimeZone().useDaylightTime()) {
  654.                            super.calendar.set(16, 3600000);
  655.                            var27 -= 3600000;
  656.                         }
  657.  
  658.                         super.calendar.set(15, var27);
  659.                         return var10.index;
  660.                      }
  661.  
  662.                      return -var2;
  663.                }
  664.             }
  665.          }
  666.  
  667.          return -var2;
  668.       }
  669.    }
  670.  
  671.    private String translatePattern(String var1, String var2, String var3) {
  672.       StringBuffer var4 = new StringBuffer();
  673.       boolean var5 = false;
  674.  
  675.       for(int var6 = 0; var6 < var1.length(); ++var6) {
  676.          char var7 = var1.charAt(var6);
  677.          if (var5) {
  678.             if (var7 == '\'') {
  679.                var5 = false;
  680.             }
  681.          } else if (var7 == '\'') {
  682.             var5 = true;
  683.          } else if (var7 >= 'a' && var7 <= 'z' || var7 >= 'A' && var7 <= 'Z') {
  684.             int var8 = var2.indexOf(var7);
  685.             if (var8 == -1) {
  686.                throw new IllegalArgumentException("Illegal pattern  character '" + var7 + "'");
  687.             }
  688.  
  689.             var7 = var3.charAt(var8);
  690.          }
  691.  
  692.          var4.append(var7);
  693.       }
  694.  
  695.       if (var5) {
  696.          throw new IllegalArgumentException("Unfinished quote in pattern");
  697.       } else {
  698.          return var4.toString();
  699.       }
  700.    }
  701.  
  702.    public String toPattern() {
  703.       return this.pattern;
  704.    }
  705.  
  706.    public String toLocalizedPattern() {
  707.       return this.translatePattern(this.pattern, "GyMdkHmsSEDFwWahKz", this.formatData.localPatternChars);
  708.    }
  709.  
  710.    public void applyPattern(String var1) {
  711.       this.pattern = var1;
  712.    }
  713.  
  714.    public void applyLocalizedPattern(String var1) {
  715.       this.pattern = this.translatePattern(var1, this.formatData.localPatternChars, "GyMdkHmsSEDFwWahKz");
  716.    }
  717.  
  718.    public DateFormatSymbols getDateFormatSymbols() {
  719.       return (DateFormatSymbols)this.formatData.clone();
  720.    }
  721.  
  722.    public void setDateFormatSymbols(DateFormatSymbols var1) {
  723.       this.formatData = (DateFormatSymbols)var1.clone();
  724.    }
  725.  
  726.    public Object clone() {
  727.       SimpleDateFormat var1 = (SimpleDateFormat)super.clone();
  728.       var1.formatData = (DateFormatSymbols)this.formatData.clone();
  729.       return var1;
  730.    }
  731.  
  732.    public int hashCode() {
  733.       return this.pattern.hashCode();
  734.    }
  735.  
  736.    public boolean equals(Object var1) {
  737.       if (!super.equals(var1)) {
  738.          return false;
  739.       } else {
  740.          SimpleDateFormat var2 = (SimpleDateFormat)var1;
  741.          return this.pattern.equals(var2.pattern) && this.formatData.equals(var2.formatData);
  742.       }
  743.    }
  744.  
  745.    private void readObject(ObjectInputStream var1) throws IOException, ClassNotFoundException {
  746.       var1.defaultReadObject();
  747.       if (this.serialVersionOnStream < 1) {
  748.          this.initializeDefaultCentury();
  749.       } else {
  750.          this.parseAmbiguousDatesAsAfter(this.defaultCenturyStart);
  751.       }
  752.  
  753.       this.serialVersionOnStream = 1;
  754.    }
  755. }
  756.