fbfe5650f5cc8e47b8a6b2aa371812ff67aaa624
[jalviewjs.git] / site / j2s / jssun / util / calendar / BaseCalendar.js
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
5 function (date) {\r
6 var bdate = date;\r
7 if (bdate.isNormalized ()) {\r
8 return true;\r
9 }var month = bdate.getMonth ();\r
10 if (month < 1 || month > 12) {\r
11 return false;\r
12 }var d = bdate.getDayOfMonth ();\r
13 if (d <= 0 || d > this.getMonthLength (bdate.getNormalizedYear (), month)) {\r
14 return false;\r
15 }var dow = bdate.getDayOfWeek ();\r
16 if (dow != jssun.util.calendar.CalendarDate.FIELD_UNDEFINED && dow != this.getDayOfWeek (bdate)) {\r
17 return false;\r
18 }if (!this.validateTime (date)) {\r
19 return false;\r
20 }bdate.setNormalized (true);\r
21 return true;\r
22 }, "jssun.util.calendar.CalendarDate");\r
23 Clazz.overrideMethod (c$, "normalize", \r
24 function (date) {\r
25 if (date.isNormalized ()) {\r
26 return true;\r
27 }var bdate = date;\r
28 var zi = bdate.getZone ();\r
29 if (zi != null) {\r
30 this.getTime (date);\r
31 return true;\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
41 d += ml;\r
42 bdate.setDayOfMonth (d);\r
43 if (m == 0) {\r
44 m = 12;\r
45 bdate.setNormalizedYear (y - 1);\r
46 }bdate.setMonth (m);\r
47 } else if (d > ml && d < (ml + 28)) {\r
48 d -= ml;\r
49 ++m;\r
50 bdate.setDayOfMonth (d);\r
51 if (m > 12) {\r
52 bdate.setNormalizedYear (y + 1);\r
53 m = 1;\r
54 }bdate.setMonth (m);\r
55 } else {\r
56 var fixedDate = d + this.getFixedDate (y, m, 1, bdate) - 1;\r
57 this.getCalendarDateFromFixedDate (bdate, fixedDate);\r
58 }} else {\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
64 return true;\r
65 }, "jssun.util.calendar.CalendarDate");\r
66 Clazz.defineMethod (c$, "normalizeMonth", \r
67 function (date) {\r
68 var bdate = date;\r
69 var year = bdate.getNormalizedYear ();\r
70 var month = bdate.getMonth ();\r
71 if (month <= 0) {\r
72 var xm = 1 - month;\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
84 function (date) {\r
85 return this.isLeapYear ((date).getNormalizedYear ()) ? 366 : 365;\r
86 }, "jssun.util.calendar.CalendarDate");\r
87 Clazz.overrideMethod (c$, "getYearLengthInMonths", \r
88 function (date) {\r
89 return 12;\r
90 }, "jssun.util.calendar.CalendarDate");\r
91 Clazz.defineMethod (c$, "getMonthLength", \r
92 function (date) {\r
93 var gdate = date;\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
103 days++;\r
104 }return days;\r
105 }, "~N,~N");\r
106 Clazz.defineMethod (c$, "getDayOfYear", \r
107 function (date) {\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
113 }, "~N,~N,~N");\r
114 Clazz.defineMethod (c$, "getFixedDate", \r
115 function (date) {\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
124 if (isJan1) {\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
137 } else {\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
139 }if (month > 2) {\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
143 }return days;\r
144 }, "~N,~N,~N,jssun.util.calendar.BaseCalendar.Date");\r
145 Clazz.overrideMethod (c$, "getCalendarDateFromFixedDate", \r
146 function (date, fixedDate) {\r
147 var gdate = date;\r
148 var year;\r
149 var jan1;\r
150 var isLeap;\r
151 if (gdate.hit (fixedDate)) {\r
152 year = gdate.getCachedYear ();\r
153 jan1 = gdate.getCachedJan1 ();\r
154 isLeap = this.isLeapYear (year);\r
155 } else {\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
162 if (isLeap) {\r
163 ++mar1;\r
164 }if (fixedDate >= mar1) {\r
165 priorDays += isLeap ? 1 : 2;\r
166 }var month = 12 * priorDays + 373;\r
167 if (month > 0) {\r
168 month = Clazz.doubleToInt (month / 367);\r
169 } else {\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
173 ++month1;\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
184 function (date) {\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
193 }, "~N");\r
194 Clazz.defineMethod (c$, "getYearFromFixedDate", \r
195 function (fixedDate) {\r
196 return this.getGregorianYearFromFixedDate (fixedDate);\r
197 }, "~N");\r
198 Clazz.defineMethod (c$, "getGregorianYearFromFixedDate", \r
199 function (fixedDate) {\r
200 var d0;\r
201 var d1;\r
202 var d2;\r
203 var d3;\r
204 var d4;\r
205 var n400;\r
206 var n100;\r
207 var n4;\r
208 var n1;\r
209 var year;\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
215 d2 = d1 % 36524;\r
216 n4 = Clazz.doubleToInt (d2 / 1461);\r
217 d3 = d2 % 1461;\r
218 n1 = Clazz.doubleToInt (d3 / 365);\r
219 d4 = (d3 % 365) + 1;\r
220 } else {\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
232 ++year;\r
233 }return year;\r
234 }, "~N");\r
235 Clazz.defineMethod (c$, "isLeapYear", \r
236 function (date) {\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
242 }, "~N");\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
252 });\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
257 return this;\r
258 }, "~N,~N,~N");\r
259 Clazz.defineMethod (c$, "hit", \r
260 function (a) {\r
261 return a == this.cachedYear;\r
262 }, "~N");\r
263 Clazz.defineMethod (c$, "hit", \r
264 function (a) {\r
265 return (a >= this.cachedFixedDateJan1 && a < this.cachedFixedDateNextJan1);\r
266 }, "~N");\r
267 Clazz.defineMethod (c$, "getCachedYear", \r
268 function () {\r
269 return this.cachedYear;\r
270 });\r
271 Clazz.defineMethod (c$, "getCachedJan1", \r
272 function () {\r
273 return this.cachedFixedDateJan1;\r
274 });\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
280 }, "~N,~N,~N");\r
281 c$ = Clazz.p0p ();\r
282 Clazz.defineStatics (c$,\r
283 "JANUARY", 1,\r
284 "FEBRUARY", 2,\r
285 "MARCH", 3,\r
286 "APRIL", 4,\r
287 "MAY", 5,\r
288 "JUNE", 6,\r
289 "JULY", 7,\r
290 "AUGUST", 8,\r
291 "SEPTEMBER", 9,\r
292 "OCTOBER", 10,\r
293 "NOVEMBER", 11,\r
294 "DECEMBER", 12,\r
295 "SUNDAY", 1,\r
296 "MONDAY", 2,\r
297 "TUESDAY", 3,\r
298 "WEDNESDAY", 4,\r
299 "THURSDAY", 5,\r
300 "FRIDAY", 6,\r
301 "SATURDAY", 7,\r
302 "BASE_YEAR", 1970,\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
307 });\r