1 Clazz.declarePackage ("java.text");
\r
2 Clazz.load (["java.text.DateFormat", "java.util.Hashtable", "java.text.DecimalFormat", "java.util.Calendar", "$.TimeZone", "jssun.util.calendar.ZoneInfo"], "java.text.SimpleDateFormat", ["java.lang.IllegalArgumentException", "$.NullPointerException", "$.Number", "$.StringBuffer", "$.StringBuilder", "java.text.MessageFormat", "java.util.Date", "java.text.CharacterIteratorFieldDelegate", "$.DateFormatSymbols", "$.DontCareFieldPosition", "$.NumberFormat", "java.util.GregorianCalendar", "$.Locale", "jssun.util.calendar.CalendarUtils", "jssun.util.resources.LocaleData"], function () {
\r
3 c$ = Clazz.decorateAsClass (function () {
\r
4 this.serialVersionOnStream = 1;
\r
6 this.compiledPattern = null;
\r
7 this.zeroDigit = '\0';
\r
8 this.formatData = null;
\r
9 this.defaultCenturyStart = null;
\r
10 this.defaultCenturyStartYear = 0;
\r
12 this.$useDateFormatSymbols = false;
\r
13 Clazz.instantialize (this, arguments);
\r
14 }, java.text, "SimpleDateFormat", java.text.DateFormat);
\r
15 Clazz.makeConstructor (c$,
\r
17 this.construct (3, 3, java.util.Locale.getDefault ());
\r
19 Clazz.makeConstructor (c$,
\r
20 function (pattern) {
\r
21 this.construct (pattern, java.util.Locale.getDefault ());
\r
23 Clazz.makeConstructor (c$,
\r
24 function (pattern, locale) {
\r
25 Clazz.superConstructor (this, java.text.SimpleDateFormat, []);
\r
26 if (pattern == null || locale == null) {
\r
27 throw new NullPointerException ();
\r
28 }this.initializeCalendar (locale);
\r
29 this.pattern = pattern;
\r
30 this.formatData = java.text.DateFormatSymbols.getInstance (locale);
\r
31 this.locale = locale;
\r
32 this.initialize (locale);
\r
33 }, "~S,java.util.Locale");
\r
34 Clazz.makeConstructor (c$,
\r
35 function (pattern, formatSymbols) {
\r
36 Clazz.superConstructor (this, java.text.SimpleDateFormat, []);
\r
37 if (pattern == null || formatSymbols == null) {
\r
38 throw new NullPointerException ();
\r
39 }this.pattern = pattern;
\r
40 this.formatData = formatSymbols.clone ();
\r
41 this.locale = java.util.Locale.getDefault ();
\r
42 this.initializeCalendar (this.locale);
\r
43 this.initialize (this.locale);
\r
44 this.$useDateFormatSymbols = true;
\r
45 }, "~S,java.text.DateFormatSymbols");
\r
46 Clazz.makeConstructor (c$,
\r
47 function (timeStyle, dateStyle, loc) {
\r
48 Clazz.superConstructor (this, java.text.SimpleDateFormat, []);
\r
50 throw new NullPointerException ();
\r
52 this.initializeCalendar (loc);
\r
53 var key = this.getKey ();
\r
54 var dateTimePatterns = java.text.SimpleDateFormat.cachedLocaleData.get (key);
\r
55 if (dateTimePatterns == null) {
\r
56 var r = jssun.util.resources.LocaleData.getDateFormatData (loc);
\r
57 if (!this.isGregorianCalendar ()) {
\r
59 dateTimePatterns = r.getStringArray (this.getCalendarName () + ".DateTimePatterns");
\r
61 if (Clazz.exceptionOf (e, java.util.MissingResourceException)) {
\r
66 }if (dateTimePatterns == null) {
\r
67 dateTimePatterns = r.getStringArray ("DateTimePatterns");
\r
68 }java.text.SimpleDateFormat.cachedLocaleData.put (key, dateTimePatterns);
\r
69 }this.formatData = java.text.DateFormatSymbols.getInstance (loc);
\r
70 if ((timeStyle >= 0) && (dateStyle >= 0)) {
\r
71 var dateTimeArgs = Clazz.newArray (-1, [dateTimePatterns[timeStyle], dateTimePatterns[dateStyle + 4]]);
\r
72 this.pattern = java.text.MessageFormat.format (dateTimePatterns[8], dateTimeArgs);
\r
73 } else if (timeStyle >= 0) {
\r
74 this.pattern = dateTimePatterns[timeStyle];
\r
75 } else if (dateStyle >= 0) {
\r
76 this.pattern = dateTimePatterns[dateStyle + 4];
\r
78 throw new IllegalArgumentException ("No date or time style specified");
\r
79 }this.initialize (loc);
\r
80 }, "~N,~N,java.util.Locale");
\r
81 Clazz.defineMethod (c$, "initialize",
\r
83 this.compiledPattern = this.compile (this.pattern);
\r
84 this.numberFormat = java.text.SimpleDateFormat.cachedNumberFormatData.get (loc);
\r
85 if (this.numberFormat == null) {
\r
86 this.numberFormat = java.text.NumberFormat.getIntegerInstance (loc);
\r
87 this.numberFormat.setGroupingUsed (false);
\r
88 java.text.SimpleDateFormat.cachedNumberFormatData.put (loc, this.numberFormat);
\r
89 }this.numberFormat = this.numberFormat.clone ();
\r
90 this.initializeDefaultCentury ();
\r
91 }, "java.util.Locale");
\r
92 Clazz.defineMethod (c$, "initializeCalendar",
\r
94 if (this.calendar == null) {
\r
95 this.calendar = java.util.Calendar.getInstance (java.util.TimeZone.getDefault (), loc);
\r
96 }}, "java.util.Locale");
\r
97 Clazz.defineMethod (c$, "getKey",
\r
99 var sb = new StringBuilder ();
\r
100 sb.append (this.getCalendarName ()).append ('.');
\r
101 sb.append (this.locale.getLanguage ()).append ('_').append (this.locale.getCountry ()).append ('_').append (this.locale.getVariant ());
\r
102 return sb.toString ();
\r
104 Clazz.defineMethod (c$, "compile",
\r
105 function (pattern) {
\r
106 var length = pattern.length;
\r
107 var inQuote = false;
\r
108 var compiledPattern = new StringBuilder (length * 2);
\r
109 var tmpBuffer = null;
\r
112 for (var i = 0; i < length; i++) {
\r
113 var c = pattern.charAt (i);
\r
115 if ((i + 1) < length) {
\r
116 c = pattern.charAt (i + 1);
\r
120 java.text.SimpleDateFormat.encode (lastTag, count, compiledPattern);
\r
124 tmpBuffer.append (c);
\r
126 compiledPattern.append (String.fromCharCode (25600 | c.charCodeAt (0)));
\r
130 java.text.SimpleDateFormat.encode (lastTag, count, compiledPattern);
\r
133 }if (tmpBuffer == null) {
\r
134 tmpBuffer = new StringBuilder (length);
\r
136 tmpBuffer.setLength (0);
\r
139 var len = tmpBuffer.length ();
\r
141 var ch = tmpBuffer.charAt (0);
\r
142 if (ch.charCodeAt (0) < 128) {
\r
143 compiledPattern.append (String.fromCharCode (25600 | ch.charCodeAt (0)));
\r
145 compiledPattern.append (String.fromCharCode (25857));
\r
146 compiledPattern.append (ch);
\r
148 java.text.SimpleDateFormat.encode (101, len, compiledPattern);
\r
149 compiledPattern.append (tmpBuffer);
\r
153 tmpBuffer.append (c);
\r
155 }if (!(c >= 'a' && c <= 'z' || c >= 'A' && c <= 'Z')) {
\r
157 java.text.SimpleDateFormat.encode (lastTag, count, compiledPattern);
\r
160 }if (c.charCodeAt (0) < 128) {
\r
161 compiledPattern.append (String.fromCharCode (25600 | c.charCodeAt (0)));
\r
164 for (j = i + 1; j < length; j++) {
\r
165 var d = pattern.charAt (j);
\r
166 if (d == '\'' || (d >= 'a' && d <= 'z' || d >= 'A' && d <= 'Z')) {
\r
169 compiledPattern.append (String.fromCharCode (25856 | (j - i)));
\r
170 for (; i < j; i++) {
\r
171 compiledPattern.append (pattern.charAt (i));
\r
176 if ((tag = "GyMdkHmsSEDFwWahKzZ".indexOf (c)) == -1) {
\r
177 throw new IllegalArgumentException ("Illegal pattern character \'" + c + "'");
\r
178 }if (lastTag == -1 || lastTag == tag) {
\r
182 }java.text.SimpleDateFormat.encode (lastTag, count, compiledPattern);
\r
187 throw new IllegalArgumentException ("Unterminated quote");
\r
189 java.text.SimpleDateFormat.encode (lastTag, count, compiledPattern);
\r
190 }var len = compiledPattern.length ();
\r
191 var r = Clazz.newCharArray (len, '\0');
\r
192 compiledPattern.getChars (0, len, r, 0);
\r
195 c$.encode = Clazz.defineMethod (c$, "encode",
\r
196 function (tag, length, buffer) {
\r
197 if (length < 255) {
\r
198 buffer.append (String.fromCharCode (tag << 8 | length));
\r
200 buffer.append (String.fromCharCode ((tag << 8) | 0xff));
\r
201 buffer.append (String.fromCharCode (length >>> 16));
\r
202 buffer.append (String.fromCharCode (length & 0xffff));
\r
203 }}, "~N,~N,StringBuilder");
\r
204 Clazz.defineMethod (c$, "initializeDefaultCentury",
\r
206 this.calendar.setTime ( new java.util.Date ());
\r
207 this.calendar.add (1, -80);
\r
208 this.parseAmbiguousDatesAsAfter (this.calendar.getTime ());
\r
210 Clazz.defineMethod (c$, "parseAmbiguousDatesAsAfter",
\r
211 function (startDate) {
\r
212 this.defaultCenturyStart = startDate;
\r
213 this.calendar.setTime (startDate);
\r
214 this.defaultCenturyStartYear = this.calendar.get (1);
\r
215 }, "java.util.Date");
\r
216 Clazz.defineMethod (c$, "set2DigitYearStart",
\r
217 function (startDate) {
\r
218 this.parseAmbiguousDatesAsAfter (startDate);
\r
219 }, "java.util.Date");
\r
220 Clazz.defineMethod (c$, "get2DigitYearStart",
\r
222 return this.defaultCenturyStart;
\r
224 Clazz.defineMethod (c$, "format",
\r
225 function (date, toAppendTo, pos) {
\r
226 pos.beginIndex = pos.endIndex = 0;
\r
227 return this.format (date, toAppendTo, pos.getFieldDelegate ());
\r
228 }, "java.util.Date,StringBuffer,java.text.FieldPosition");
\r
229 Clazz.defineMethod (c$, "format",
\r
230 function (date, toAppendTo, delegate) {
\r
231 this.calendar.setTime (date);
\r
232 var useDateFormatSymbols = this.useDateFormatSymbols ();
\r
233 for (var i = 0; i < this.compiledPattern.length; ) {
\r
234 var tag = (this.compiledPattern[i]).charCodeAt (0) >>> 8;
\r
235 var count = (this.compiledPattern[i++]).charCodeAt (0) & 0xff;
\r
236 if (count == 255) {
\r
237 count = (this.compiledPattern[i++]).charCodeAt (0) << 16;
\r
238 count |= (this.compiledPattern[i++]).charCodeAt (0);
\r
241 toAppendTo.append (String.fromCharCode (count));
\r
244 toAppendTo.append (this.compiledPattern, i, count);
\r
248 this.subFormat (tag, count, delegate, toAppendTo, useDateFormatSymbols);
\r
253 }, "java.util.Date,StringBuffer,java.text.Format.FieldDelegate");
\r
254 Clazz.overrideMethod (c$, "formatToCharacterIterator",
\r
256 var sb = new StringBuffer ();
\r
257 var delegate = new java.text.CharacterIteratorFieldDelegate ();
\r
258 if (Clazz.instanceOf (obj, java.util.Date)) {
\r
259 this.format (obj, sb, delegate);
\r
260 } else if (Clazz.instanceOf (obj, Number)) {
\r
261 this.format ( new java.util.Date ((obj).longValue ()), sb, delegate);
\r
262 } else if (obj == null) {
\r
263 throw new NullPointerException ("formatToCharacterIterator must be passed non-null object");
\r
265 throw new IllegalArgumentException ("Cannot format given Object as a Date");
\r
266 }return delegate.getIterator (sb.toString ());
\r
268 Clazz.defineMethod (c$, "subFormat",
\r
269 function (patternCharIndex, count, delegate, buffer, useDateFormatSymbols) {
\r
270 var maxIntCount = 2147483647;
\r
271 var current = null;
\r
272 var beginOffset = buffer.length ();
\r
273 var field = java.text.SimpleDateFormat.PATTERN_INDEX_TO_CALENDAR_FIELD[patternCharIndex];
\r
274 var value = this.calendar.get (field);
\r
275 var style = (count >= 4) ? 2 : 1;
\r
276 if (!useDateFormatSymbols) {
\r
277 current = this.calendar.getDisplayName (field, style, this.locale);
\r
278 }switch (patternCharIndex) {
\r
280 if (useDateFormatSymbols) {
\r
281 var eras = this.formatData.getEras ();
\r
282 if (value < eras.length) current = eras[value];
\r
283 }if (current == null) current = "";
\r
286 if (Clazz.instanceOf (this.calendar, java.util.GregorianCalendar)) {
\r
287 if (count >= 4) this.zeroPaddingNumber (value, count, maxIntCount, buffer);
\r
288 else this.zeroPaddingNumber (value, 2, 2, buffer);
\r
290 if (current == null) {
\r
291 this.zeroPaddingNumber (value, style == 2 ? 1 : count, maxIntCount, buffer);
\r
294 if (useDateFormatSymbols) {
\r
297 months = this.formatData.getMonths ();
\r
298 current = months[value];
\r
299 } else if (count == 3) {
\r
300 months = this.formatData.getShortMonths ();
\r
301 current = months[value];
\r
305 }}if (current == null) {
\r
306 this.zeroPaddingNumber (value + 1, count, maxIntCount, buffer);
\r
309 if (current == null) {
\r
310 if (value == 0) this.zeroPaddingNumber (this.calendar.getMaximum (11) + 1, count, maxIntCount, buffer);
\r
311 else this.zeroPaddingNumber (value, count, maxIntCount, buffer);
\r
314 if (useDateFormatSymbols) {
\r
317 weekdays = this.formatData.getWeekdays ();
\r
318 current = weekdays[value];
\r
320 weekdays = this.formatData.getShortWeekdays ();
\r
321 current = weekdays[value];
\r
324 if (useDateFormatSymbols) {
\r
325 var ampm = this.formatData.getAmPmStrings ();
\r
326 current = ampm[value];
\r
329 if (current == null) {
\r
330 if (value == 0) this.zeroPaddingNumber (this.calendar.getLeastMaximum (10) + 1, count, maxIntCount, buffer);
\r
331 else this.zeroPaddingNumber (value, count, maxIntCount, buffer);
\r
334 if (current == null) {
\r
335 var id = this.calendar.getTimeZone ().getID ();
\r
336 buffer.append (id);
\r
339 value = Clazz.doubleToInt ((this.calendar.get (15) + this.calendar.get (16)) / 60000);
\r
342 buffer.append ('+');
\r
345 }var num = (Clazz.doubleToInt (value / 60)) * 100 + (value % 60);
\r
346 jssun.util.calendar.CalendarUtils.sprintf0d (buffer, num, width);
\r
349 if (current == null) {
\r
350 this.zeroPaddingNumber (value, count, maxIntCount, buffer);
\r
353 if (current != null) {
\r
354 buffer.append (current);
\r
355 }var fieldID = java.text.SimpleDateFormat.PATTERN_INDEX_TO_DATE_FORMAT_FIELD[patternCharIndex];
\r
356 var f = java.text.SimpleDateFormat.PATTERN_INDEX_TO_DATE_FORMAT_FIELD_ID[patternCharIndex];
\r
357 delegate.formatted (fieldID, f, f, beginOffset, buffer.length (), buffer);
\r
358 }, "~N,~N,java.text.Format.FieldDelegate,StringBuffer,~B");
\r
359 Clazz.defineMethod (c$, "zeroPaddingNumber",
\r
360 function (value, minDigits, maxDigits, buffer) {
\r
362 if (this.zeroDigit.charCodeAt (0) == 0) {
\r
363 this.zeroDigit = (this.numberFormat).getDecimalFormatSymbols ().getZeroDigit ();
\r
365 if (value < 100 && minDigits >= 1 && minDigits <= 2) {
\r
367 if (minDigits == 2) {
\r
368 buffer.append (this.zeroDigit);
\r
369 }buffer.append (String.fromCharCode (this.zeroDigit.charCodeAt (0) + value));
\r
371 buffer.append (String.fromCharCode (this.zeroDigit.charCodeAt (0) + Clazz.doubleToInt (value / 10)));
\r
372 buffer.append (String.fromCharCode (this.zeroDigit.charCodeAt (0) + value % 10));
\r
374 } else if (value >= 1000 && value < 10000) {
\r
375 if (minDigits == 4) {
\r
376 buffer.append (String.fromCharCode (this.zeroDigit.charCodeAt (0) + Clazz.doubleToInt (value / 1000)));
\r
378 buffer.append (String.fromCharCode (this.zeroDigit.charCodeAt (0) + Clazz.doubleToInt (value / 100)));
\r
380 buffer.append (String.fromCharCode (this.zeroDigit.charCodeAt (0) + Clazz.doubleToInt (value / 10)));
\r
381 buffer.append (String.fromCharCode (this.zeroDigit.charCodeAt (0) + value % 10));
\r
383 }if (minDigits == 2 && maxDigits == 2) {
\r
384 this.zeroPaddingNumber (value % 100, 2, 2, buffer);
\r
387 if (Clazz.exceptionOf (e, Exception)) {
\r
392 this.numberFormat.setMinimumIntegerDigits (minDigits);
\r
393 this.numberFormat.setMaximumIntegerDigits (maxDigits);
\r
394 this.numberFormat.format (value, buffer, java.text.DontCareFieldPosition.INSTANCE);
\r
395 }, "~N,~N,~N,StringBuffer");
\r
396 Clazz.defineMethod (c$, "parse",
\r
397 function (text, pos) {
\r
399 var i0 = pos.index; pos.index = Math.min(80, text.length()); while
\r
400 (pos.index >= i0) { var d = new Date(text.substring(i0,
\r
401 pos.index)); var x = d.getMilliseconds(); if (!isNaN(x))
\r
402 return d; pos.index--; }
\r
405 }}, "~S,java.text.ParsePosition");
\r
406 Clazz.defineMethod (c$, "getCalendarName",
\r
408 return this.calendar.getClass ().getName ();
\r
410 Clazz.defineMethod (c$, "useDateFormatSymbols",
\r
412 if (this.$useDateFormatSymbols) {
\r
414 }return this.isGregorianCalendar () || this.locale == null;
\r
416 Clazz.defineMethod (c$, "isGregorianCalendar",
\r
418 return "java.util.GregorianCalendar".equals (this.getCalendarName ());
\r
420 Clazz.defineMethod (c$, "translatePattern",
\r
421 function (pattern, from, to) {
\r
422 var result = new StringBuilder ();
\r
423 var inQuote = false;
\r
424 for (var i = 0; i < pattern.length; ++i) {
\r
425 var c = pattern.charAt (i);
\r
427 if (c == '\'') inQuote = false;
\r
429 if (c == '\'') inQuote = true;
\r
430 else if ((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z')) {
\r
431 var ci = from.indexOf (c);
\r
432 if (ci == -1) throw new IllegalArgumentException ("Illegal pattern character \'" + c + "'");
\r
433 c = to.charAt (ci);
\r
434 }}result.append (c);
\r
436 if (inQuote) throw new IllegalArgumentException ("Unfinished quote in pattern");
\r
437 return result.toString ();
\r
439 Clazz.defineMethod (c$, "toPattern",
\r
441 return this.pattern;
\r
443 Clazz.defineMethod (c$, "toLocalizedPattern",
\r
445 return this.translatePattern (this.pattern, "GyMdkHmsSEDFwWahKzZ", this.formatData.getLocalPatternChars ());
\r
447 Clazz.defineMethod (c$, "applyPattern",
\r
448 function (pattern) {
\r
449 this.compiledPattern = this.compile (pattern);
\r
450 this.pattern = pattern;
\r
452 Clazz.defineMethod (c$, "applyLocalizedPattern",
\r
453 function (pattern) {
\r
454 var p = this.translatePattern (pattern, this.formatData.getLocalPatternChars (), "GyMdkHmsSEDFwWahKzZ");
\r
455 this.compiledPattern = this.compile (p);
\r
458 Clazz.defineMethod (c$, "getDateFormatSymbols",
\r
460 return this.formatData.clone ();
\r
462 Clazz.defineMethod (c$, "setDateFormatSymbols",
\r
463 function (newFormatSymbols) {
\r
464 this.formatData = newFormatSymbols.clone ();
\r
465 this.$useDateFormatSymbols = true;
\r
466 }, "java.text.DateFormatSymbols");
\r
467 Clazz.defineMethod (c$, "clone",
\r
469 var other = Clazz.superCall (this, java.text.SimpleDateFormat, "clone", []);
\r
470 other.formatData = this.formatData.clone ();
\r
473 Clazz.overrideMethod (c$, "hashCode",
\r
475 return this.pattern.hashCode ();
\r
477 Clazz.defineMethod (c$, "equals",
\r
479 if (!Clazz.superCall (this, java.text.SimpleDateFormat, "equals", [obj])) return false;
\r
481 return (this.pattern.equals (that.pattern) && this.formatData.equals (that.formatData));
\r
483 Clazz.defineStatics (c$,
\r
484 "currentSerialVersion", 1,
\r
485 "TAG_QUOTE_ASCII_CHAR", 100,
\r
486 "TAG_QUOTE_CHARS", 101,
\r
487 "millisPerHour", 3600000,
\r
488 "millisPerMinute", 60000,
\r
490 c$.cachedLocaleData = c$.prototype.cachedLocaleData = new java.util.Hashtable (3);
\r
491 c$.cachedNumberFormatData = c$.prototype.cachedNumberFormatData = new java.util.Hashtable (3);
\r
492 Clazz.defineStatics (c$,
\r
493 "PATTERN_INDEX_TO_CALENDAR_FIELD", Clazz.newIntArray (-1, [0, 1, 2, 5, 11, 11, 12, 13, 14, 7, 6, 8, 3, 4, 9, 10, 10, 15, 15]),
\r
494 "PATTERN_INDEX_TO_DATE_FORMAT_FIELD", Clazz.newIntArray (-1, [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 17]));
\r
495 c$.PATTERN_INDEX_TO_DATE_FORMAT_FIELD_ID = c$.prototype.PATTERN_INDEX_TO_DATE_FORMAT_FIELD_ID = Clazz.newArray (-1, [java.text.DateFormat.Field.ERA, java.text.DateFormat.Field.YEAR, java.text.DateFormat.Field.MONTH, java.text.DateFormat.Field.DAY_OF_MONTH, java.text.DateFormat.Field.HOUR_OF_DAY1, java.text.DateFormat.Field.HOUR_OF_DAY0, java.text.DateFormat.Field.MINUTE, java.text.DateFormat.Field.SECOND, java.text.DateFormat.Field.MILLISECOND, java.text.DateFormat.Field.DAY_OF_WEEK, java.text.DateFormat.Field.DAY_OF_YEAR, java.text.DateFormat.Field.DAY_OF_WEEK_IN_MONTH, java.text.DateFormat.Field.WEEK_OF_YEAR, java.text.DateFormat.Field.WEEK_OF_MONTH, java.text.DateFormat.Field.AM_PM, java.text.DateFormat.Field.HOUR1, java.text.DateFormat.Field.HOUR0, java.text.DateFormat.Field.TIME_ZONE, java.text.DateFormat.Field.TIME_ZONE]);
\r