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