home *** CD-ROM | disk | FTP | other *** search
- package java.text;
-
- import java.io.IOException;
- import java.io.ObjectInputStream;
- import java.util.Calendar;
- import java.util.Date;
- import java.util.Hashtable;
- import java.util.Locale;
- import java.util.ResourceBundle;
- import java.util.TimeZone;
-
- public class SimpleDateFormat extends DateFormat {
- static final long serialVersionUID = 4774881970558875024L;
- static final int currentSerialVersion = 1;
- private int serialVersionOnStream;
- private String pattern;
- private DateFormatSymbols formatData;
- private Date defaultCenturyStart;
- private transient int defaultCenturyStartYear;
- private static final int millisPerHour = 3600000;
- private static final int millisPerMinute = 60000;
- private static final String GMT_PLUS = "GMT+";
- private static final String GMT_MINUS = "GMT-";
- private static final String GMT = "GMT";
- private static final Hashtable cachedLocaleData = new Hashtable(3);
- 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};
- 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};
-
- public SimpleDateFormat() {
- this(3, 7, Locale.getDefault());
- }
-
- public SimpleDateFormat(String var1) {
- this(var1, Locale.getDefault());
- }
-
- public SimpleDateFormat(String var1, Locale var2) {
- this.serialVersionOnStream = 1;
- this.pattern = var1;
- this.formatData = new DateFormatSymbols(var2);
- this.initialize(var2);
- }
-
- public SimpleDateFormat(String var1, DateFormatSymbols var2) {
- this.serialVersionOnStream = 1;
- this.pattern = var1;
- this.formatData = (DateFormatSymbols)var2.clone();
- this.initialize(Locale.getDefault());
- }
-
- SimpleDateFormat(int var1, int var2, Locale var3) {
- this.serialVersionOnStream = 1;
- String[] var4 = (String[])cachedLocaleData.get(var3);
- if (var4 == null) {
- ResourceBundle var5 = ResourceBundle.getBundle("java.text.resources.LocaleElements", var3);
- var4 = var5.getStringArray("DateTimePatterns");
- cachedLocaleData.put(var3, var4);
- }
-
- this.formatData = new DateFormatSymbols(var3);
- if (var1 >= 0 && var2 >= 0) {
- Object[] var6 = new Object[]{var4[var1], var4[var2]};
- this.pattern = MessageFormat.format(var4[8], var6);
- } else if (var1 >= 0) {
- this.pattern = var4[var1];
- } else {
- if (var2 < 0) {
- throw new IllegalArgumentException("No date or time style specified");
- }
-
- this.pattern = var4[var2];
- }
-
- this.initialize(var3);
- }
-
- private void initialize(Locale var1) {
- super.calendar = Calendar.getInstance(TimeZone.getDefault(), var1);
- super.numberFormat = NumberFormat.getInstance(var1);
- super.numberFormat.setGroupingUsed(false);
- if (super.numberFormat instanceof DecimalFormat) {
- ((DecimalFormat)super.numberFormat).setDecimalSeparatorAlwaysShown(false);
- }
-
- super.numberFormat.setParseIntegerOnly(true);
- super.numberFormat.setMinimumFractionDigits(0);
- this.initializeDefaultCentury();
- }
-
- private void initializeDefaultCentury() {
- super.calendar.setTime(new Date());
- super.calendar.add(1, -80);
- this.parseAmbiguousDatesAsAfter(super.calendar.getTime());
- }
-
- private void parseAmbiguousDatesAsAfter(Date var1) {
- this.defaultCenturyStart = var1;
- super.calendar.setTime(var1);
- this.defaultCenturyStartYear = super.calendar.get(1);
- }
-
- public StringBuffer format(Date var1, StringBuffer var2, FieldPosition var3) {
- var3.beginIndex = var3.endIndex = 0;
- super.calendar.setTime(var1);
- boolean var4 = false;
- char var5 = 0;
- int var6 = 0;
- int var7 = 1;
-
- for(int var8 = 0; var8 < this.pattern.length(); ++var8) {
- char var9 = this.pattern.charAt(var8);
- if (var4) {
- if (var9 == '\'') {
- var4 = false;
- if (var6 == 0) {
- var2.append(var9);
- } else {
- var6 = 0;
- }
-
- var7 = 0;
- } else {
- var2.append(var9);
- ++var6;
- }
- } else {
- if (var9 == '\'') {
- var4 = true;
- if (var6 > 0) {
- var2.append(this.subFormat(var5, var6, var2.length(), var3));
- var6 = 0;
- var5 = 0;
- }
-
- if (var7 == 0) {
- var2.append(var9);
- var6 = 1;
- }
- } else if (var9 >= 'a' && var9 <= 'z' || var9 >= 'A' && var9 <= 'Z') {
- if (var9 != var5 && var6 > 0) {
- var2.append(this.subFormat(var5, var6, var2.length(), var3));
- var5 = var9;
- var6 = 1;
- } else {
- if (var9 != var5) {
- var5 = var9;
- }
-
- ++var6;
- }
- } else if (var6 > 0) {
- var2.append(this.subFormat(var5, var6, var2.length(), var3));
- var2.append(var9);
- var5 = 0;
- var6 = 0;
- } else {
- var2.append(var9);
- }
-
- ++var7;
- }
- }
-
- if (var6 > 0) {
- var2.append(this.subFormat(var5, var6, var2.length(), var3));
- }
-
- return var2;
- }
-
- private String subFormat(char var1, int var2, int var3, FieldPosition var4) throws IllegalArgumentException {
- int var5 = -1;
- byte var6 = 10;
- String var7 = "";
- if ((var5 = "GyMdkHmsSEDFwWahKz".indexOf(var1)) == -1) {
- throw new IllegalArgumentException("Illegal pattern character '" + var1 + "'");
- } else {
- int var8 = PATTERN_INDEX_TO_CALENDAR_FIELD[var5];
- int var9 = super.calendar.get(var8);
- switch (var5) {
- case 0:
- var7 = this.formatData.eras[var9];
- break;
- case 1:
- if (var2 >= 4) {
- var7 = this.zeroPaddingNumber((long)var9, 4, var6);
- } else {
- var7 = this.zeroPaddingNumber((long)var9, 2, 2);
- }
- break;
- case 2:
- if (var2 >= 4) {
- var7 = this.formatData.months[var9];
- } else if (var2 == 3) {
- var7 = this.formatData.shortMonths[var9];
- } else {
- var7 = this.zeroPaddingNumber((long)(var9 + 1), var2, var6);
- }
- break;
- case 4:
- if (var9 == 0) {
- var7 = this.zeroPaddingNumber((long)(super.calendar.getMaximum(11) + 1), var2, var6);
- } else {
- var7 = this.zeroPaddingNumber((long)var9, var2, var6);
- }
- break;
- case 8:
- if (var2 > 3) {
- var2 = 3;
- } else if (var2 == 2) {
- var9 /= 10;
- } else if (var2 == 1) {
- var9 /= 100;
- }
-
- var7 = this.zeroPaddingNumber((long)var9, var2, var6);
- break;
- case 9:
- if (var2 >= 4) {
- var7 = this.formatData.weekdays[var9];
- } else {
- var7 = this.formatData.shortWeekdays[var9];
- }
- break;
- case 14:
- var7 = this.formatData.ampms[var9];
- break;
- case 15:
- if (var9 == 0) {
- var7 = this.zeroPaddingNumber((long)(super.calendar.getLeastMaximum(10) + 1), var2, var6);
- } else {
- var7 = this.zeroPaddingNumber((long)var9, var2, var6);
- }
- break;
- case 17:
- int var10 = this.formatData.getZoneIndex(super.calendar.getTimeZone().getID());
- if (var10 == -1) {
- StringBuffer var11 = new StringBuffer();
- var9 = super.calendar.get(15) + super.calendar.get(16);
- if (var9 < 0) {
- var11.append("GMT-");
- var9 = -var9;
- } else {
- var11.append("GMT+");
- }
-
- var11.append(this.zeroPaddingNumber((long)(var9 / 3600000), 2, 2));
- var11.append(':');
- var11.append(this.zeroPaddingNumber((long)(var9 % 3600000 / '\uea60'), 2, 2));
- var7 = var11.toString();
- } else if (super.calendar.get(16) != 0) {
- if (var2 >= 4) {
- var7 = this.formatData.zoneStrings[var10][3];
- } else {
- var7 = this.formatData.zoneStrings[var10][4];
- }
- } else if (var2 >= 4) {
- var7 = this.formatData.zoneStrings[var10][1];
- } else {
- var7 = this.formatData.zoneStrings[var10][2];
- }
- break;
- default:
- var7 = this.zeroPaddingNumber((long)var9, var2, var6);
- }
-
- if (var4.field == PATTERN_INDEX_TO_DATE_FORMAT_FIELD[var5] && var4.beginIndex == 0 && var4.endIndex == 0) {
- var4.beginIndex = var3;
- var4.endIndex = var3 + var7.length();
- }
-
- return var7;
- }
- }
-
- private String zeroPaddingNumber(long var1, int var3, int var4) {
- super.numberFormat.setMinimumIntegerDigits(var3);
- super.numberFormat.setMaximumIntegerDigits(var4);
- return super.numberFormat.format(var1);
- }
-
- public Date parse(String var1, ParsePosition var2) {
- int var14 = var2.index;
- int var4 = var14;
- boolean[] var5 = new boolean[]{false};
- super.calendar.clear();
- boolean var6 = false;
- char var7 = 0;
- int var8 = 0;
- int var9 = 1;
-
- for(int var10 = 0; var10 < this.pattern.length(); ++var10) {
- char var11 = this.pattern.charAt(var10);
- if (var6) {
- if (var11 == '\'') {
- var6 = false;
- if (var8 == 0) {
- if (var11 != var1.charAt(var14)) {
- var2.index = var4;
- return null;
- }
-
- ++var14;
- }
-
- var8 = 0;
- var9 = 0;
- } else {
- if (var11 != var1.charAt(var14)) {
- var2.index = var4;
- return null;
- }
-
- ++var8;
- ++var14;
- }
- } else {
- if (var11 == '\'') {
- var6 = true;
- if (var8 > 0) {
- var14 = this.subParse(var1, var14, var7, var8, false, var5);
- if (var14 < 0) {
- var2.index = var4;
- return null;
- }
-
- var8 = 0;
- }
-
- if (var9 == 0) {
- if (var11 != var1.charAt(var14)) {
- var2.index = var4;
- return null;
- }
-
- ++var14;
- var8 = 1;
- }
- } else if (var11 >= 'a' && var11 <= 'z' || var11 >= 'A' && var11 <= 'Z') {
- if (var11 != var7 && var8 > 0) {
- var14 = this.subParse(var1, var14, var7, var8, true, var5);
- if (var14 < 0) {
- var2.index = var4;
- return null;
- }
-
- var7 = var11;
- var8 = 1;
- } else {
- if (var11 != var7) {
- var7 = var11;
- }
-
- ++var8;
- }
- } else if (var8 > 0) {
- var14 = this.subParse(var1, var14, var7, var8, false, var5);
- if (var14 < 0) {
- var2.index = var4;
- return null;
- }
-
- if (var14 >= var1.length() || var11 != var1.charAt(var14)) {
- var2.index = var4;
- return null;
- }
-
- ++var14;
- var8 = 0;
- var7 = 0;
- } else {
- if (var11 != var1.charAt(var14)) {
- var2.index = var4;
- return null;
- }
-
- ++var14;
- }
-
- ++var9;
- }
- }
-
- if (var8 > 0) {
- var14 = this.subParse(var1, var14, var7, var8, false, var5);
- if (var14 < 0) {
- var2.index = var4;
- return null;
- }
- }
-
- var2.index = var14;
-
- try {
- Date var15;
- if (var5[0]) {
- Calendar var12 = (Calendar)super.calendar.clone();
- var15 = super.calendar.getTime();
- if (var15.before(this.defaultCenturyStart)) {
- var12.set(1, this.defaultCenturyStartYear + 100);
- var15 = var12.getTime();
- }
- } else {
- var15 = super.calendar.getTime();
- }
-
- return var15;
- } catch (IllegalArgumentException var13) {
- var2.index = var4;
- return null;
- }
- }
-
- private int matchString(String var1, int var2, int var3, String[] var4) {
- int var5 = 0;
- int var6 = var4.length;
- if (var3 == 7) {
- var5 = 1;
- }
-
- int var7 = 0;
-
- int var8;
- for(var8 = -1; var5 < var6; ++var5) {
- int var9 = var4[var5].length();
- if (var9 > var7 && var1.regionMatches(true, var2, var4[var5], 0, var9)) {
- var8 = var5;
- var7 = var9;
- }
- }
-
- if (var8 >= 0) {
- super.calendar.set(var3, var8);
- return var2 + var7;
- } else {
- return -var2;
- }
- }
-
- private int subParse(String var1, int var2, char var3, int var4, boolean var5, boolean[] var6) {
- int var8 = 0;
- ParsePosition var10 = new ParsePosition(0);
- int var11 = -1;
- if ((var11 = "GyMdkHmsSEDFwWahKz".indexOf(var3)) == -1) {
- return -var2;
- } else {
- var10.index = var2;
-
- for(int var12 = PATTERN_INDEX_TO_CALENDAR_FIELD[var11]; var10.index < var1.length(); ++var10.index) {
- int var13 = var1.charAt(var10.index);
- if (var13 != 32 && var13 != 9) {
- if (var11 == 4 || var11 == 15 || var11 == 2 && var4 <= 2 || var11 == 1) {
- Number var7;
- if (var5) {
- if (var2 + var4 > var1.length()) {
- return -var2;
- }
-
- var7 = super.numberFormat.parse(var1.substring(0, var2 + var4), var10);
- } else {
- var7 = super.numberFormat.parse(var1, var10);
- }
-
- if (var7 == null) {
- return -var2;
- }
-
- var8 = var7.intValue();
- }
-
- switch (var11) {
- case 0:
- return this.matchString(var1, var2, 0, this.formatData.eras);
- case 1:
- if (var4 <= 2 && var10.index - var2 <= 2) {
- var13 = this.defaultCenturyStartYear % 100;
- var6[0] = var8 == var13;
- var8 += this.defaultCenturyStartYear / 100 * 100 + (var8 < var13 ? 100 : 0);
- }
-
- super.calendar.set(1, var8);
- return var10.index;
- case 2:
- if (var4 <= 2) {
- super.calendar.set(2, var8 - 1);
- return var10.index;
- }
-
- var13 = 0;
- if ((var13 = this.matchString(var1, var2, 2, this.formatData.months)) > 0) {
- return var13;
- }
-
- return this.matchString(var1, var2, 2, this.formatData.shortMonths);
- case 4:
- if (var8 == super.calendar.getMaximum(11) + 1) {
- var8 = 0;
- }
-
- super.calendar.set(11, var8);
- return var10.index;
- case 9:
- var13 = (char)0;
- if ((var13 = this.matchString(var1, var2, 7, this.formatData.weekdays)) > 0) {
- return var13;
- }
-
- return this.matchString(var1, var2, 7, this.formatData.shortWeekdays);
- case 14:
- return this.matchString(var1, var2, 9, this.formatData.ampms);
- case 15:
- if (var8 == super.calendar.getLeastMaximum(10) + 1) {
- var8 = 0;
- }
-
- super.calendar.set(10, var8);
- return var10.index;
- case 17:
- var13 = 0;
- int var26;
- if (var1.regionMatches(true, var2, "GMT", 0, "GMT".length())) {
- super.calendar.set(16, 0);
- var10.index = var2 + "GMT".length();
- if (var1.charAt(var10.index) == '+') {
- var13 = 1;
- } else {
- if (var1.charAt(var10.index) != '-') {
- super.calendar.set(15, 0);
- return var10.index;
- }
-
- var13 = -1;
- }
-
- ++var10.index;
- Number var15 = super.numberFormat.parse(var1, var10);
- if (var15 == null) {
- return -var2;
- }
-
- if (var1.charAt(var10.index) == ':') {
- var26 = var15.intValue() * 60;
- ++var10.index;
- var15 = super.numberFormat.parse(var1, var10);
- if (var15 == null) {
- return -var2;
- }
-
- var26 += var15.intValue();
- } else {
- var26 = var15.intValue();
- if (var26 < 24) {
- var26 *= 60;
- } else {
- var26 = var26 % 100 + var26 / 100 * 60;
- }
- }
- } else {
- for(int var9 = 0; var9 < this.formatData.zoneStrings.length; ++var9) {
- int var31;
- for(var31 = 1; var31 <= 4 && !var1.regionMatches(true, var2, this.formatData.zoneStrings[var9][var31], 0, this.formatData.zoneStrings[var9][var31].length()); ++var31) {
- }
-
- if (var31 <= 4) {
- TimeZone var16 = TimeZone.getTimeZone(this.formatData.zoneStrings[var9][0]);
- super.calendar.set(15, var16.getRawOffset());
- super.calendar.set(16, var31 >= 3 ? 3600000 : 0);
- return var2 + this.formatData.zoneStrings[var9][var31].length();
- }
- }
-
- DecimalFormat var32 = new DecimalFormat("+####;-####");
- ((NumberFormat)var32).setParseIntegerOnly(true);
- Number var33 = var32.parse(var1, var10);
- if (var33 == null) {
- return -var2;
- }
-
- var26 = var33.intValue();
- var13 = 1;
- if (var26 < 0) {
- var13 = -1;
- var26 = -var26;
- }
-
- if (var26 < 24) {
- var26 *= 60;
- } else {
- var26 = var26 % 100 + var26 / 100 * 60;
- }
- }
-
- if (var13 != 0) {
- var26 *= '\uea60' * var13;
- if (super.calendar.getTimeZone().useDaylightTime()) {
- super.calendar.set(16, 3600000);
- var26 -= 3600000;
- }
-
- super.calendar.set(15, var26);
- return var10.index;
- }
-
- return -var2;
- default:
- Number var17;
- if (var5) {
- if (var2 + var4 > var1.length()) {
- return -var2;
- }
-
- var17 = super.numberFormat.parse(var1.substring(0, var2 + var4), var10);
- } else {
- var17 = super.numberFormat.parse(var1, var10);
- }
-
- if (var17 != null) {
- super.calendar.set(var12, var17.intValue());
- return var10.index;
- }
-
- return -var2;
- }
- }
- }
-
- return -var2;
- }
- }
-
- private String translatePattern(String var1, String var2, String var3) {
- StringBuffer var4 = new StringBuffer();
- boolean var5 = false;
-
- for(int var6 = 0; var6 < var1.length(); ++var6) {
- char var7 = var1.charAt(var6);
- if (var5) {
- if (var7 == '\'') {
- var5 = false;
- }
- } else if (var7 == '\'') {
- var5 = true;
- } else if (var7 >= 'a' && var7 <= 'z' || var7 >= 'A' && var7 <= 'Z') {
- int var8 = var2.indexOf(var7);
- if (var8 == -1) {
- throw new IllegalArgumentException("Illegal pattern character '" + var7 + "'");
- }
-
- var7 = var3.charAt(var8);
- }
-
- var4.append(var7);
- }
-
- if (var5) {
- throw new IllegalArgumentException("Unfinished quote in pattern");
- } else {
- return var4.toString();
- }
- }
-
- public String toPattern() {
- return this.pattern;
- }
-
- public String toLocalizedPattern() {
- return this.translatePattern(this.pattern, "GyMdkHmsSEDFwWahKz", this.formatData.localPatternChars);
- }
-
- public void applyPattern(String var1) {
- this.pattern = var1;
- }
-
- public void applyLocalizedPattern(String var1) {
- this.pattern = this.translatePattern(var1, this.formatData.localPatternChars, "GyMdkHmsSEDFwWahKz");
- }
-
- public DateFormatSymbols getDateFormatSymbols() {
- return (DateFormatSymbols)this.formatData.clone();
- }
-
- public void setDateFormatSymbols(DateFormatSymbols var1) {
- this.formatData = (DateFormatSymbols)var1.clone();
- }
-
- public Object clone() {
- SimpleDateFormat var1 = (SimpleDateFormat)super.clone();
- var1.formatData = (DateFormatSymbols)this.formatData.clone();
- return var1;
- }
-
- public int hashCode() {
- return this.pattern.hashCode();
- }
-
- public boolean equals(Object var1) {
- if (!super.equals(var1)) {
- return false;
- } else {
- SimpleDateFormat var2 = (SimpleDateFormat)var1;
- return this.pattern.equals(var2.pattern) && this.formatData.equals(var2.formatData);
- }
- }
-
- private void readObject(ObjectInputStream var1) throws IOException, ClassNotFoundException {
- var1.defaultReadObject();
- if (this.serialVersionOnStream < 1) {
- this.initializeDefaultCentury();
- } else {
- this.parseAmbiguousDatesAsAfter(this.defaultCenturyStart);
- }
-
- this.serialVersionOnStream = 1;
- }
- }
-