1 Clazz.declarePackage ("jssun.util.calendar");
\r
2 Clazz.load (["jssun.util.calendar.AbstractCalendar", "$.CalendarDate"], "jssun.util.calendar.BaseCalendar", ["java.lang.IllegalArgumentException", "jssun.util.calendar.CalendarUtils"], function () {
\r
3 c$ = Clazz.declareType (jssun.util.calendar, "BaseCalendar", jssun.util.calendar.AbstractCalendar);
\r
4 Clazz.overrideMethod (c$, "validate",
\r
7 if (bdate.isNormalized ()) {
\r
9 }var month = bdate.getMonth ();
\r
10 if (month < 1 || month > 12) {
\r
12 }var d = bdate.getDayOfMonth ();
\r
13 if (d <= 0 || d > this.getMonthLength (bdate.getNormalizedYear (), month)) {
\r
15 }var dow = bdate.getDayOfWeek ();
\r
16 if (dow != jssun.util.calendar.CalendarDate.FIELD_UNDEFINED && dow != this.getDayOfWeek (bdate)) {
\r
18 }if (!this.validateTime (date)) {
\r
20 }bdate.setNormalized (true);
\r
22 }, "jssun.util.calendar.CalendarDate");
\r
23 Clazz.overrideMethod (c$, "normalize",
\r
25 if (date.isNormalized ()) {
\r
28 var zi = bdate.getZone ();
\r
30 this.getTime (date);
\r
32 }var days = this.normalizeTime (bdate);
\r
33 this.normalizeMonth (bdate);
\r
34 var d = bdate.getDayOfMonth () + days;
\r
35 var m = bdate.getMonth ();
\r
36 var y = bdate.getNormalizedYear ();
\r
37 var ml = this.getMonthLength (y, m);
\r
38 if (!(d > 0 && d <= ml)) {
\r
39 if (d <= 0 && d > -28) {
\r
40 ml = this.getMonthLength (y, --m);
\r
42 bdate.setDayOfMonth (d);
\r
45 bdate.setNormalizedYear (y - 1);
\r
46 }bdate.setMonth (m);
\r
47 } else if (d > ml && d < (ml + 28)) {
\r
50 bdate.setDayOfMonth (d);
\r
52 bdate.setNormalizedYear (y + 1);
\r
54 }bdate.setMonth (m);
\r
56 var fixedDate = d + this.getFixedDate (y, m, 1, bdate) - 1;
\r
57 this.getCalendarDateFromFixedDate (bdate, fixedDate);
\r
59 bdate.setDayOfWeek (this.getDayOfWeek (bdate));
\r
60 }date.setLeapYear (this.isLeapYear (bdate.getNormalizedYear ()));
\r
61 date.setZoneOffset (0);
\r
62 date.setDaylightSaving (0);
\r
63 bdate.setNormalized (true);
\r
65 }, "jssun.util.calendar.CalendarDate");
\r
66 Clazz.defineMethod (c$, "normalizeMonth",
\r
69 var year = bdate.getNormalizedYear ();
\r
70 var month = bdate.getMonth ();
\r
73 year -= ((Clazz.doubleToInt (xm / 12)) + 1);
\r
74 month = 13 - (xm % 12);
\r
75 bdate.setNormalizedYear (year);
\r
76 bdate.setMonth (month);
\r
77 } else if (month > 12) {
\r
78 year += (Clazz.doubleToInt ((month - 1) / 12));
\r
79 month = ((month - 1)) % 12 + 1;
\r
80 bdate.setNormalizedYear (year);
\r
81 bdate.setMonth (month);
\r
82 }}, "jssun.util.calendar.CalendarDate");
\r
83 Clazz.overrideMethod (c$, "getYearLength",
\r
85 return this.isLeapYear ((date).getNormalizedYear ()) ? 366 : 365;
\r
86 }, "jssun.util.calendar.CalendarDate");
\r
87 Clazz.overrideMethod (c$, "getYearLengthInMonths",
\r
90 }, "jssun.util.calendar.CalendarDate");
\r
91 Clazz.defineMethod (c$, "getMonthLength",
\r
94 var month = gdate.getMonth ();
\r
95 if (month < 1 || month > 12) {
\r
96 throw new IllegalArgumentException ("Illegal month value: " + month);
\r
97 }return this.getMonthLength (gdate.getNormalizedYear (), month);
\r
98 }, "jssun.util.calendar.CalendarDate");
\r
99 Clazz.defineMethod (c$, "getMonthLength",
\r
100 function (year, month) {
\r
101 var days = jssun.util.calendar.BaseCalendar.DAYS_IN_MONTH[month];
\r
102 if (month == 2 && this.isLeapYear (year)) {
\r
106 Clazz.defineMethod (c$, "getDayOfYear",
\r
108 return this.getDayOfYear ((date).getNormalizedYear (), date.getMonth (), date.getDayOfMonth ());
\r
109 }, "jssun.util.calendar.CalendarDate");
\r
110 Clazz.defineMethod (c$, "getDayOfYear",
\r
111 function (year, month, dayOfMonth) {
\r
112 return dayOfMonth + (this.isLeapYear (year) ? jssun.util.calendar.BaseCalendar.ACCUMULATED_DAYS_IN_MONTH_LEAP[month] : jssun.util.calendar.BaseCalendar.ACCUMULATED_DAYS_IN_MONTH[month]);
\r
114 Clazz.defineMethod (c$, "getFixedDate",
\r
116 if (!date.isNormalized ()) {
\r
117 this.normalizeMonth (date);
\r
118 }return this.getFixedDate ((date).getNormalizedYear (), date.getMonth (), date.getDayOfMonth (), date);
\r
119 }, "jssun.util.calendar.CalendarDate");
\r
120 Clazz.defineMethod (c$, "getFixedDate",
\r
121 function (year, month, dayOfMonth, cache) {
\r
122 var isJan1 = month == 1 && dayOfMonth == 1;
\r
123 if (cache != null && cache.hit (year)) {
\r
125 return cache.getCachedJan1 ();
\r
126 }return cache.getCachedJan1 () + this.getDayOfYear (year, month, dayOfMonth) - 1;
\r
127 }var n = year - 1970;
\r
128 if (n >= 0 && n < jssun.util.calendar.BaseCalendar.FIXED_DATES.length) {
\r
129 var jan1 = jssun.util.calendar.BaseCalendar.FIXED_DATES[n];
\r
130 if (cache != null) {
\r
131 cache.setCache (year, jan1, this.isLeapYear (year) ? 366 : 365);
\r
132 }return isJan1 ? jan1 : jan1 + this.getDayOfYear (year, month, dayOfMonth) - 1;
\r
133 }var prevyear = year - 1;
\r
134 var days = dayOfMonth;
\r
135 if (prevyear >= 0) {
\r
136 days += (365 * prevyear) + (Clazz.doubleToInt (prevyear / 4)) - (Clazz.doubleToInt (prevyear / 100)) + (Clazz.doubleToInt (prevyear / 400)) + (Clazz.doubleToInt ((367 * month - 362) / 12));
\r
138 days += (365 * prevyear) + jssun.util.calendar.CalendarUtils.floorDivide (prevyear, 4) - jssun.util.calendar.CalendarUtils.floorDivide (prevyear, 100) + jssun.util.calendar.CalendarUtils.floorDivide (prevyear, 400) + jssun.util.calendar.CalendarUtils.floorDivide ((367 * month - 362), 12);
\r
140 days -= this.isLeapYear (year) ? 1 : 2;
\r
141 }if (cache != null && isJan1) {
\r
142 cache.setCache (year, days, this.isLeapYear (year) ? 366 : 365);
\r
144 }, "~N,~N,~N,jssun.util.calendar.BaseCalendar.Date");
\r
145 Clazz.overrideMethod (c$, "getCalendarDateFromFixedDate",
\r
146 function (date, fixedDate) {
\r
151 if (gdate.hit (fixedDate)) {
\r
152 year = gdate.getCachedYear ();
\r
153 jan1 = gdate.getCachedJan1 ();
\r
154 isLeap = this.isLeapYear (year);
\r
156 year = this.getGregorianYearFromFixedDate (fixedDate);
\r
157 jan1 = this.getFixedDate (year, 1, 1, null);
\r
158 isLeap = this.isLeapYear (year);
\r
159 gdate.setCache (year, jan1, isLeap ? 366 : 365);
\r
160 }var priorDays = (fixedDate - jan1);
\r
161 var mar1 = jan1 + 31 + 28;
\r
164 }if (fixedDate >= mar1) {
\r
165 priorDays += isLeap ? 1 : 2;
\r
166 }var month = 12 * priorDays + 373;
\r
168 month = Clazz.doubleToInt (month / 367);
\r
170 month = jssun.util.calendar.CalendarUtils.floorDivide (month, 367);
\r
171 }var month1 = jan1 + jssun.util.calendar.BaseCalendar.ACCUMULATED_DAYS_IN_MONTH[month];
\r
172 if (isLeap && month >= 3) {
\r
174 }var dayOfMonth = (fixedDate - month1) + 1;
\r
175 var dayOfWeek = jssun.util.calendar.BaseCalendar.getDayOfWeekFromFixedDate (fixedDate);
\r
176 gdate.setNormalizedYear (year);
\r
177 gdate.setMonth (month);
\r
178 gdate.setDayOfMonth (dayOfMonth);
\r
179 gdate.setDayOfWeek (dayOfWeek);
\r
180 gdate.setLeapYear (isLeap);
\r
181 gdate.setNormalized (true);
\r
182 }, "jssun.util.calendar.CalendarDate,~N");
\r
183 Clazz.defineMethod (c$, "getDayOfWeek",
\r
185 var fixedDate = this.getFixedDate (date);
\r
186 return jssun.util.calendar.BaseCalendar.getDayOfWeekFromFixedDate (fixedDate);
\r
187 }, "jssun.util.calendar.CalendarDate");
\r
188 c$.getDayOfWeekFromFixedDate = Clazz.defineMethod (c$, "getDayOfWeekFromFixedDate",
\r
189 function (fixedDate) {
\r
190 if (fixedDate >= 0) {
\r
191 return (fixedDate % 7) + 1;
\r
192 }return jssun.util.calendar.CalendarUtils.mod (fixedDate, 7) + 1;
\r
194 Clazz.defineMethod (c$, "getYearFromFixedDate",
\r
195 function (fixedDate) {
\r
196 return this.getGregorianYearFromFixedDate (fixedDate);
\r
198 Clazz.defineMethod (c$, "getGregorianYearFromFixedDate",
\r
199 function (fixedDate) {
\r
210 if (fixedDate > 0) {
\r
211 d0 = fixedDate - 1;
\r
212 n400 = (Clazz.doubleToInt (d0 / 146097));
\r
213 d1 = (d0 % 146097);
\r
214 n100 = Clazz.doubleToInt (d1 / 36524);
\r
216 n4 = Clazz.doubleToInt (d2 / 1461);
\r
218 n1 = Clazz.doubleToInt (d3 / 365);
\r
219 d4 = (d3 % 365) + 1;
\r
221 d0 = fixedDate - 1;
\r
222 n400 = jssun.util.calendar.CalendarUtils.floorDivide (d0, 146097);
\r
223 d1 = jssun.util.calendar.CalendarUtils.mod (d0, 146097);
\r
224 n100 = jssun.util.calendar.CalendarUtils.floorDivide (d1, 36524);
\r
225 d2 = jssun.util.calendar.CalendarUtils.mod (d1, 36524);
\r
226 n4 = jssun.util.calendar.CalendarUtils.floorDivide (d2, 1461);
\r
227 d3 = jssun.util.calendar.CalendarUtils.mod (d2, 1461);
\r
228 n1 = jssun.util.calendar.CalendarUtils.floorDivide (d3, 365);
\r
229 d4 = jssun.util.calendar.CalendarUtils.mod (d3, 365) + 1;
\r
230 }year = 400 * n400 + 100 * n100 + 4 * n4 + n1;
\r
231 if (!(n100 == 4 || n1 == 4)) {
\r
235 Clazz.defineMethod (c$, "isLeapYear",
\r
237 return this.isLeapYear ((date).getNormalizedYear ());
\r
238 }, "jssun.util.calendar.CalendarDate");
\r
239 Clazz.defineMethod (c$, "isLeapYear",
\r
240 function (normalizedYear) {
\r
241 return jssun.util.calendar.CalendarUtils.isGregorianLeapYear (normalizedYear);
\r
243 Clazz.pu$h(self.c$);
\r
244 c$ = Clazz.decorateAsClass (function () {
\r
245 this.cachedYear = 2004;
\r
246 this.cachedFixedDateJan1 = 731581;
\r
247 this.cachedFixedDateNextJan1 = 0;
\r
248 Clazz.instantialize (this, arguments);
\r
249 }, jssun.util.calendar.BaseCalendar, "Date", jssun.util.calendar.CalendarDate);
\r
250 Clazz.prepareFields (c$, function () {
\r
251 this.cachedFixedDateNextJan1 = this.cachedFixedDateJan1 + 366;
\r
253 Clazz.defineMethod (c$, "setNormalizedDate",
\r
254 function (a, b, c) {
\r
255 this.setNormalizedYear (a);
\r
256 this.setMonth (b).setDayOfMonth (c);
\r
259 Clazz.defineMethod (c$, "hit",
\r
261 return a == this.cachedYear;
\r
263 Clazz.defineMethod (c$, "hit",
\r
265 return (a >= this.cachedFixedDateJan1 && a < this.cachedFixedDateNextJan1);
\r
267 Clazz.defineMethod (c$, "getCachedYear",
\r
269 return this.cachedYear;
\r
271 Clazz.defineMethod (c$, "getCachedJan1",
\r
273 return this.cachedFixedDateJan1;
\r
275 Clazz.defineMethod (c$, "setCache",
\r
276 function (a, b, c) {
\r
277 this.cachedYear = a;
\r
278 this.cachedFixedDateJan1 = b;
\r
279 this.cachedFixedDateNextJan1 = b + c;
\r
282 Clazz.defineStatics (c$,
\r
303 "FIXED_DATES", Clazz.newIntArray (-1, [719163, 719528, 719893, 720259, 720624, 720989, 721354, 721720, 722085, 722450, 722815, 723181, 723546, 723911, 724276, 724642, 725007, 725372, 725737, 726103, 726468, 726833, 727198, 727564, 727929, 728294, 728659, 729025, 729390, 729755, 730120, 730486, 730851, 731216, 731581, 731947, 732312, 732677, 733042, 733408, 733773, 734138, 734503, 734869, 735234, 735599, 735964, 736330, 736695, 737060, 737425, 737791, 738156, 738521, 738886, 739252, 739617, 739982, 740347, 740713, 741078, 741443, 741808, 742174, 742539, 742904, 743269, 743635, 744000, 744365]),
\r
304 "DAYS_IN_MONTH", Clazz.newIntArray (-1, [31, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]),
\r
305 "ACCUMULATED_DAYS_IN_MONTH", Clazz.newIntArray (-1, [-30, 0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334]),
\r
306 "ACCUMULATED_DAYS_IN_MONTH_LEAP", Clazz.newIntArray (-1, [-30, 0, 31, 60, 91, 121, 152, 182, 213, 244, 274, 305, 335]));
\r