SCM

SCM Repository

[rmetrics] Annotation of /pkg/fCalendar/R/5A-HolidayDates.R
ViewVC logotype

Annotation of /pkg/fCalendar/R/5A-HolidayDates.R

Parent Directory Parent Directory | Revision Log Revision Log


Revision 432 - (view) (download)

1 : wuertz 259
2 :     # This library is free software; you can redistribute it and/or
3 :     # modify it under the terms of the GNU Library General Public
4 :     # License as published by the Free Software Foundation; either
5 :     # version 2 of the License, or (at your option) any later version.
6 :     #
7 :     # This library is distributed in the hope that it will be useful,
8 :     # but WITHOUT ANY WARRANTY; without even the implied warranty of
9 :     # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
10 :     # GNU Library General Public License for more details.
11 :     #
12 :     # You should have received a copy of the GNU Library General
13 :     # Public License along with this library; if not, write to the
14 :     # Free Foundation, Inc., 59 Temple Place, Suite 330, Boston,
15 :     # MA 02111-1307 USA
16 :    
17 :     # Copyrights (C)
18 :     # for this R-port:
19 :     # 1999 - 2004, Diethelm Wuertz, GPL
20 :     # Diethelm Wuertz <wuertz@itp.phys.ethz.ch>
21 :     # info@rmetrics.org
22 :     # www.rmetrics.org
23 :     # for the code accessed (or partly included) from other R-ports:
24 :     # see R's copyright and license files
25 :     # for the code accessed (or partly included) from contributed R-ports
26 :     # and other sources
27 :     # see Rmetrics's copyright file
28 :    
29 :    
30 :     ################################################################################
31 : wuertz 424 # FUNCTION: DESCRIPTION:
32 :     # ... Holiday Functions
33 :     # FUNCTION: DESCRIPTION:
34 :     # .holidayList Prints all public and ecclestical holidays
35 :     # .easter Returns date of easter or related feasts
36 :     # .easterSunday Easter Algorithm
37 :     # FUNCTION: DESCRIPTION:
38 :     # .on.or.after Computes date in month that is a nday ON OR AFTER date
39 :     # .on.or.before Computes date in month that is a nday ON OR BEFORE date
40 :     # .nth.of.nday Computes nth ocurrance of a nday in year/month
41 :     # .last.of.nday Computes the last nday in year/month
42 :     # FUNCTION: DESCRIPTION:
43 :     # .sdate Computes ISO-8601 dates from Julian day numbers
44 :     # .sjulian Computes Julian day numbers from ISO-8601 dates
45 :     # .sday.of.week Computes day of the week for ISO-8601 dates
46 :     # .sleap.year Returns TRUE/FALSE if dates belong to leap years or not
47 : wuertz 259 ################################################################################
48 :    
49 :    
50 : wuertz 424 ################################################################################
51 :     # FUNCTION: DESCRIPTION:
52 :     # ... Holiday Functions
53 : wuertz 385
54 : wuertz 259
55 :     Septuagesima =
56 : wuertz 271 function(year = currentYear) {
57 : wuertz 424 ans = .easter(year, -63)
58 : wuertz 259 timeDate(as.character(ans)) }
59 :    
60 :     Quinquagesima =
61 : wuertz 271 function(year = currentYear) {
62 : wuertz 424 ans = .easter(year, -49)
63 : wuertz 259 timeDate(as.character(ans)) }
64 :    
65 :     AshWednesday =
66 : wuertz 271 function(year = currentYear) {
67 : wuertz 424 ans = .easter(year, -46)
68 : wuertz 259 timeDate(as.character(ans)) }
69 :    
70 :     PalmSunday =
71 : wuertz 271 function(year = currentYear) {
72 : wuertz 424 ans = .easter(year, -7)
73 : wuertz 259 timeDate(as.character(ans)) }
74 :    
75 :     GoodFriday =
76 : wuertz 271 function(year = currentYear) {
77 : wuertz 424 ans = .easter(year, -2)
78 : wuertz 259 timeDate(as.character(ans)) }
79 :    
80 :     Easter =
81 : wuertz 271 function(year = currentYear) {
82 : wuertz 424 ans = .easter(year)
83 : wuertz 259 timeDate(as.character(ans)) }
84 :    
85 :     EasterSunday =
86 : wuertz 271 function(year = currentYear) {
87 : wuertz 424 ans = .easter(year = currentYear)
88 : wuertz 259 timeDate(as.character(ans)) }
89 :    
90 :     EasterMonday =
91 : wuertz 271 function(year = currentYear) {
92 : wuertz 424 ans = .easter(year, 1)
93 : wuertz 259
94 :     timeDate(as.character(ans)) }
95 :    
96 :     RogationSunday =
97 : wuertz 271 function(year = currentYear) {
98 : wuertz 424 ans = .easter(year, 35)
99 : wuertz 259 timeDate(as.character(ans)) }
100 :    
101 :     Ascension =
102 : wuertz 271 function(year = currentYear) {
103 : wuertz 424 ans = .easter(year, 39)
104 : wuertz 259 timeDate(as.character(ans)) }
105 :    
106 :     Pentecost =
107 : wuertz 271 function(year = currentYear) {
108 : wuertz 424 ans = .easter(year, 49)
109 : wuertz 259 timeDate(as.character(ans)) }
110 :    
111 :     PentecostMonday =
112 : wuertz 271 function(year = currentYear) {
113 : wuertz 424 ans = .easter(year, 50)
114 : wuertz 259 timeDate(as.character(ans)) }
115 :    
116 :     TrinitySunday =
117 : wuertz 271 function(year = currentYear) {
118 : wuertz 424 ans = .easter(year, 56)
119 : wuertz 259 timeDate(as.character(ans)) }
120 :    
121 :     CorpusChristi =
122 : wuertz 271 function(year = currentYear) {
123 : wuertz 424 ans = .easter(year, 60)
124 : wuertz 259 timeDate(as.character(ans)) }
125 :    
126 :    
127 :     # ------------------------------------------------------------------------------
128 :    
129 :    
130 :     ChristTheKing =
131 : wuertz 271 function(year = currentYear) {
132 : wuertz 259 ans = .on.or.after(year, 11, 20, 0)
133 :     timeDate(as.character(ans)) }
134 :    
135 :     Advent1st =
136 : wuertz 271 function(year = currentYear) {
137 : wuertz 259 ans = .on.or.after(year, 11, 27, 0)
138 :     timeDate(as.character(ans)) }
139 :    
140 :     Advent2nd =
141 : wuertz 271 function(year = currentYear) {
142 : wuertz 259 ans = .on.or.after(year, 12, 4, 0)
143 :     timeDate(as.character(ans)) }
144 :    
145 :     Advent3rd =
146 : wuertz 271 function(year = currentYear) {
147 : wuertz 259 ans = .on.or.after(year, 12, 11, 0)
148 :     timeDate(as.character(ans)) }
149 :    
150 :     Advent4th =
151 : wuertz 271 function(year = currentYear) {
152 : wuertz 259 ans = .on.or.after(year, 12, 18, 0)
153 :     timeDate(as.character(ans)) }
154 :    
155 :     ChristmasEve =
156 : wuertz 271 function(year = currentYear) {
157 : wuertz 259 ans = year*10000 + 1224
158 :     timeDate(as.character(ans)) }
159 :    
160 :     ChristmasDay =
161 : wuertz 271 function(year = currentYear) {
162 : wuertz 259 ans = year*10000 + 1225
163 :     timeDate(as.character(ans)) }
164 :    
165 :     BoxingDay =
166 : wuertz 271 function(year = currentYear) {
167 : wuertz 259 ans = year*10000 + 1226
168 :     timeDate(as.character(ans)) }
169 :    
170 :    
171 :     # ------------------------------------------------------------------------------
172 :    
173 :    
174 :     SolemnityOfMary =
175 : wuertz 271 function(year = currentYear) {
176 : wuertz 259 ans = year*10000 + 0101
177 :     timeDate(as.character(ans)) }
178 :    
179 :     Epiphany =
180 : wuertz 271 function(year = currentYear) {
181 : wuertz 259 ans = year*10000 + 0106
182 :     timeDate(as.character(ans)) }
183 :    
184 :     PresentationOfLord =
185 : wuertz 271 function(year = currentYear) {
186 : wuertz 259 ans = year*10000 + 0202
187 :     timeDate(as.character(ans)) }
188 :    
189 :     Annunciation =
190 : wuertz 271 function(year = currentYear) {
191 : wuertz 259 ans = year*10000 + 0325
192 :     timeDate(as.character(ans)) }
193 :    
194 :     TransfigurationOfLord =
195 : wuertz 271 function(year = currentYear) {
196 : wuertz 259 ans = year*10000 + 0806
197 :     timeDate(as.character(ans)) }
198 :    
199 :     AssumptionOfMary =
200 : wuertz 271 function(year = currentYear) {
201 : wuertz 259 ans = year*10000 + 0815
202 :     timeDate(as.character(ans)) }
203 :    
204 :     BirthOfVirginMary =
205 : wuertz 271 function(year = currentYear) {
206 : wuertz 259 ans = year*10000 + 0908
207 :     timeDate(as.character(ans)) }
208 :    
209 :     CelebrationOfHolyCross =
210 : wuertz 271 function(year = currentYear) {
211 : wuertz 259 ans = year*10000 + 0914
212 :     timeDate(as.character(ans)) }
213 :    
214 :     MassOfArchangels =
215 : wuertz 271 function(year = currentYear) {
216 : wuertz 259 ans = year*10000 + 0929
217 :     timeDate(as.character(ans)) }
218 :    
219 : wuertz 271 AllSaints = function(year = currentYear) {
220 : wuertz 259 ans = year*10000 + 1101
221 :     timeDate(as.character(ans)) }
222 :    
223 :     AllSouls =
224 : wuertz 271 function(year = currentYear) {
225 : wuertz 259 ans = year*10000 + 1102
226 :     timeDate(as.character(ans)) }
227 :    
228 :    
229 :     # ------------------------------------------------------------------------------
230 :    
231 :    
232 :     NewYearsDay =
233 : wuertz 271 function(year = currentYear) {
234 : wuertz 259 ans = year*10000 + 0101
235 :     timeDate(as.character(ans)) }
236 :    
237 :     LaborDay =
238 : wuertz 271 function(year = currentYear) {
239 : wuertz 259 ans = year*10000 + 0501
240 :     timeDate(as.character(ans)) }
241 :    
242 :    
243 :     # ------------------------------------------------------------------------------
244 :    
245 :    
246 :     CHBerchtoldsDay =
247 : wuertz 271 function(year = currentYear) {
248 : wuertz 259 ans = year*10000 + 0102
249 :     timeDate(as.character(ans)) }
250 :    
251 :     CHSechselaeuten =
252 : wuertz 271 function(year = currentYear) {
253 : wuertz 259 ans = NULL
254 :     for (y in year) {
255 :     theDate = .nth.of.nday(y, 4, 1, 3)
256 : wuertz 424 if (as.character(theDate) == as.character(.easter(y, +1))) {
257 : wuertz 271 theDate = .nth.of.nday(y, 4, 1, 4)
258 :     }
259 : wuertz 259 ans = c(ans, theDate)
260 :     }
261 :     timeDate(as.character(ans)) }
262 :    
263 :     CHAscension =
264 : wuertz 271 function(year = currentYear) {
265 : wuertz 424 ans = .easter(year, 39)
266 : wuertz 259 timeDate(as.character(ans)) }
267 :    
268 :     CHConfederationDay =
269 : wuertz 271 function(year = currentYear) {
270 : wuertz 259 ans = year*10000 + 0801
271 :     timeDate(as.character(ans)) }
272 :    
273 :     CHKnabenschiessen =
274 : wuertz 271 function(year = currentYear) {
275 : wuertz 259 ans = .nth.of.nday(year, 9, 1, 2)
276 :     timeDate(as.character(ans)) }
277 :    
278 :    
279 :     # ------------------------------------------------------------------------------
280 :    
281 :    
282 :     GBMayDay =
283 : wuertz 271 function(year = currentYear) {
284 : wuertz 259 ans = .nth.of.nday(year, 5, 1, 1)
285 :     timeDate(as.character(ans)) }
286 :    
287 :     GBBankHoliday =
288 : wuertz 271 function(year = currentYear) {
289 : wuertz 259 ans = .last.of.nday(year, 5, 31, 1)
290 :     timeDate(as.character(ans)) }
291 :    
292 :     GBSummerBankHoliday =
293 : wuertz 271 function(year = currentYear) {
294 : wuertz 259 ans = .last.of.nday(year, 8, 31, 1)
295 :     timeDate(as.character(ans)) }
296 :    
297 :     GBMilleniumDay =
298 : wuertz 271 function(year = currentYear) {
299 : wuertz 259 ans = 19991231
300 :     timeDate(as.character(ans)) }
301 :    
302 :    
303 :     # ------------------------------------------------------------------------------
304 :    
305 :    
306 :     DEAscension =
307 : wuertz 271 function(year = currentYear) {
308 : wuertz 424 ans = .easter(year, 39)
309 : wuertz 259 timeDate(as.character(ans)) }
310 :    
311 :     DECorpusChristi =
312 : wuertz 271 function(year = currentYear) {
313 : wuertz 424 ans = .easter(year, 60)
314 : wuertz 259 timeDate(as.character(ans)) }
315 :    
316 :     DEGermanUnity =
317 : wuertz 271 function(year = currentYear) {
318 : wuertz 259 ans = year*10000 + 1003
319 :     timeDate(as.character(ans)) }
320 :    
321 :     DEChristmasEve =
322 : wuertz 271 function(year = currentYear) {
323 : wuertz 259 ans = year*10000 + 1224
324 :     timeDate(as.character(ans)) }
325 :    
326 :     DENewYearsEve =
327 : wuertz 271 function(year = currentYear) {
328 : wuertz 259 ans = year*10000 + 1231
329 :     timeDate(as.character(ans)) }
330 :    
331 :    
332 :     # ------------------------------------------------------------------------------
333 :    
334 :    
335 :     FRFetDeLaVictoire1945 =
336 : wuertz 271 function(year = currentYear) {
337 : wuertz 259 ans = year*10000 + 0508
338 :     timeDate(as.character(ans)) }
339 :    
340 :     FRAscension =
341 : wuertz 271 function(year = currentYear) {
342 : wuertz 424 ans = .easter(year, 39)
343 : wuertz 259 timeDate(as.character(ans)) }
344 :    
345 :     FRBastilleDay =
346 : wuertz 271 function(year = currentYear) {
347 : wuertz 259 ans = year*10000 + 0714
348 :     timeDate(as.character(ans)) }
349 :    
350 :     FRAssumptionVirginMary =
351 : wuertz 271 function(year = currentYear) {
352 : wuertz 259 ans = year*10000 + 0815
353 :     timeDate(as.character(ans)) }
354 :    
355 :     FRAllSaints =
356 : wuertz 271 function(year = currentYear) {
357 : wuertz 259 ans = year*10000 + 1101
358 :     timeDate(as.character(ans)) }
359 :    
360 :     FRArmisticeDay =
361 : wuertz 271 function(year = currentYear) {
362 : wuertz 259 ans = year*10000 + 1111
363 :     timeDate(as.character(ans)) }
364 :    
365 :    
366 :     # ------------------------------------------------------------------------------
367 :    
368 :    
369 :     ITEpiphany =
370 : wuertz 271 function(year = currentYear) {
371 : wuertz 259 ans = year*10000 + 0106
372 :     timeDate(as.character(ans)) }
373 :    
374 :     ITLiberationDay =
375 : wuertz 271 function(year = currentYear) {
376 : wuertz 259 ans = year*10000 + 0425
377 :     timeDate(as.character(ans)) }
378 :    
379 :     ITAssumptionOfVirginMary =
380 : wuertz 271 function(year = currentYear) {
381 : wuertz 259 ans = year*10000 + 0815
382 :     timeDate(as.character(ans)) }
383 :    
384 :     ITAllSaints =
385 : wuertz 271 function(year = currentYear) {
386 : wuertz 259 ans = year*10000 + 1101
387 :     timeDate(as.character(ans)) }
388 :    
389 :     ITStAmrose =
390 : wuertz 271 function(year = currentYear) {
391 : wuertz 259 ans = year*10000 + 1207
392 :     timeDate(as.character(ans)) }
393 :    
394 :     ITImmaculateConception =
395 : wuertz 271 function(year = currentYear) {
396 : wuertz 259 ans = year*10000 + 1208
397 :     timeDate(as.character(ans)) }
398 :    
399 :    
400 :     # ------------------------------------------------------------------------------
401 :    
402 :    
403 :     USNewYearsDay =
404 : wuertz 271 function(year = currentYear) {
405 : wuertz 259 ans = year*10000 + 0101
406 :     timeDate(as.character(ans)) }
407 :    
408 :     USInaugurationDay =
409 : wuertz 271 function(year = currentYear) {
410 : wuertz 259 ans = year*10000 + 0120
411 :     timeDate(as.character(ans)) }
412 :    
413 :     USMLKingsBirthday =
414 : wuertz 271 function(year = currentYear) {
415 : wuertz 259 ans = .nth.of.nday(year, 1, 1, 3)
416 :     timeDate(as.character(ans)) }
417 :    
418 :     USLincolnsBirthday =
419 : wuertz 271 function(year = currentYear) {
420 : wuertz 259 ans = year*10000 + 0212
421 :     timeDate(as.character(ans)) }
422 :    
423 :     USWashingtonsBirthday =
424 : wuertz 271 function(year = currentYear) {
425 : wuertz 259 ans = .nth.of.nday(year, 2, 1, 3)
426 :     timeDate(as.character(ans)) }
427 :    
428 :     USMemorialDay =
429 : wuertz 271 function(year = currentYear) {
430 : wuertz 259 ans = .last.of.nday(year, 5, 31, 1)
431 :     timeDate(as.character(ans)) }
432 :    
433 :     USIndependenceDay =
434 : wuertz 271 function(year = currentYear) {
435 : wuertz 259 ans = year*10000 + 0704
436 :     timeDate(as.character(ans)) }
437 :    
438 :     USLaborDay =
439 : wuertz 271 function(year = currentYear) {
440 : wuertz 259 ans = .nth.of.nday(year, 9, 1, 1)
441 :     timeDate(as.character(ans)) }
442 :    
443 :     USColumbusDay =
444 : wuertz 271 function(year = currentYear) {
445 : wuertz 259 ans = .nth.of.nday(year, 10, 1, 2)
446 :     timeDate(as.character(ans)) }
447 :    
448 :     USElectionDay =
449 : wuertz 271 function(year = currentYear) {
450 : wuertz 259 ans = .on.or.after(year, 11, 2, 2)
451 :     timeDate(as.character(ans)) }
452 :    
453 :     USVeteransDay =
454 : wuertz 271 function(year = currentYear) {
455 : wuertz 259 ans = year*10000 + 1111
456 :     timeDate(as.character(ans)) }
457 :    
458 :     USThanksgivingDay =
459 : wuertz 271 function(year = currentYear) {
460 : wuertz 259 ans = .nth.of.nday(year, 11, 4, 4)
461 :     timeDate(as.character(ans)) }
462 :    
463 :     USChristmasDay =
464 : wuertz 271 function(year = currentYear) {
465 : wuertz 259 ans = year*10000 + 1225
466 :     timeDate(as.character(ans)) }
467 :    
468 :     USCPulaskisBirthday =
469 : wuertz 271 function(year = currentYear) {
470 : wuertz 259 ans = .nth.of.nday(year, 3, 1, 1)
471 :     timeDate(as.character(ans)) }
472 :    
473 :     USGoodFriday =
474 : wuertz 271 function(year = currentYear) {
475 : wuertz 424 ans = .easter(year, -2)
476 : wuertz 259 timeDate(as.character(ans)) }
477 :    
478 :     USPresidentsDay =
479 : wuertz 271 function(year = currentYear) {
480 : wuertz 259 ans = .nth.of.nday(year, 2, 1, 3)
481 :     timeDate(as.character(ans)) }
482 :    
483 :     USDecorationMemorialDay =
484 : wuertz 271 function(year = currentYear) {
485 : wuertz 259 ans = year*10000 + 0530
486 :     timeDate(as.character(ans)) }
487 :    
488 :    
489 :     # ------------------------------------------------------------------------------
490 :    
491 :    
492 :     CAVictoriaDay =
493 : wuertz 271 function(year = currentYear) {
494 : wuertz 259 ans = .on.or.before(year, 5, 24, 1)
495 :     timeDate(as.character(ans)) }
496 :    
497 :     CACanadaDay =
498 : wuertz 271 function(year = currentYear) {
499 : wuertz 259 ans = year*10000 + 0701
500 :     timeDate(as.character(ans)) }
501 :    
502 :     CACivicProvincialHoliday =
503 : wuertz 271 function(year = currentYear) {
504 : wuertz 259 ans = .nth.of.nday(year, 8, 1, 1)
505 :     timeDate(as.character(ans)) }
506 :    
507 :     CALabourDay =
508 : wuertz 271 function(year = currentYear) {
509 : wuertz 259 ans = .nth.of.nday(year, 9, 1, 1)
510 :     timeDate(as.character(ans)) }
511 :    
512 :     CAThanksgivingDay =
513 : wuertz 271 function(year = currentYear) {
514 : wuertz 259 ans = .nth.of.nday(year, 10, 1, 2)
515 :     timeDate(as.character(ans)) }
516 :    
517 :     CaRemembranceDay =
518 : wuertz 271 function(year = currentYear) {
519 : wuertz 259 ans = year*10000 + 1111
520 :     timeDate(as.character(ans)) }
521 :    
522 :    
523 :     # ------------------------------------------------------------------------------
524 :    
525 :    
526 :     JPNewYearsDay =
527 : wuertz 271 function(year = currentYear) {
528 : wuertz 259 ans = year*10000 + 0101
529 :     timeDate(as.character(ans)) }
530 :    
531 :     JPGantan =
532 : wuertz 271 function(year = currentYear) {
533 : wuertz 259 ans = year*10000 + 0101
534 :     timeDate(as.character(ans)) }
535 :    
536 :     JPBankHolidayJan2 =
537 : wuertz 271 function(year = currentYear) {
538 : wuertz 259 ans = year*10000 + 0102
539 :     timeDate(as.character(ans)) }
540 :    
541 :     JPBankHolidayJan3 =
542 : wuertz 271 function(year = currentYear) {
543 : wuertz 259 ans = year*10000 + 0103
544 :     timeDate(as.character(ans)) }
545 :    
546 :     JPComingOfAgeDay =
547 : wuertz 271 function(year = currentYear) {
548 : wuertz 259 ans = year*10000 + 0115
549 :     timeDate(as.character(ans)) }
550 :    
551 :     JPSeijinNoHi =
552 : wuertz 271 function(year = currentYear) {
553 : wuertz 259 ans = year*10000 + 0115
554 :     timeDate(as.character(ans)) }
555 :    
556 :     JPNatFoundationDay =
557 : wuertz 271 function(year = currentYear) {
558 : wuertz 259 ans =year*10000 + 0211
559 :     timeDate(as.character(ans)) }
560 :    
561 :     JPKenkokuKinenNoHi =
562 : wuertz 271 function(year = currentYear) {
563 : wuertz 259 ans = year*10000 + 0211
564 :     timeDate(as.character(ans)) }
565 :    
566 :     JPGreeneryDay =
567 : wuertz 271 function(year = currentYear) {
568 : wuertz 259 ans = year*10000 + 0429
569 :     timeDate(as.character(ans)) }
570 :    
571 :     JPMidoriNoHi =
572 : wuertz 271 function(year = currentYear) {
573 : wuertz 259 ans = year*10000 + 0429
574 :     timeDate(as.character(ans)) }
575 :    
576 :     JPConstitutionDay =
577 : wuertz 271 function(year = currentYear) {
578 : wuertz 259 ans = year*10000 + 0503
579 :     timeDate(as.character(ans)) }
580 :    
581 :     JPKenpouKinenBi =
582 : wuertz 271 function(year = currentYear) {
583 : wuertz 259 ans = year*10000 + 0503
584 :     timeDate(as.character(ans)) }
585 :    
586 :     JPNationHoliday =
587 : wuertz 271 function(year = currentYear) {
588 : wuertz 259 ans = year*10000 + 0504
589 :     timeDate(as.character(ans)) }
590 :    
591 :     JPKokuminNoKyujitu =
592 : wuertz 271 function(year = currentYear) {
593 : wuertz 259 ans = year*10000 + 0504
594 :     timeDate(as.character(ans)) }
595 :    
596 :     JPChildrensDay =
597 : wuertz 271 function(year = currentYear) {
598 : wuertz 259 ans = year*10000 + 0505
599 :     timeDate(as.character(ans)) }
600 :    
601 :     JPKodomoNoHi =
602 : wuertz 271 function(year = currentYear) {
603 : wuertz 259 ans = year*10000 + 0505
604 :     timeDate(as.character(ans)) }
605 :    
606 :     JPMarineDay =
607 : wuertz 271 function(year = currentYear) {
608 : wuertz 259 ans = year*10000 + 0720
609 :     timeDate(as.character(ans)) }
610 :    
611 :     JPUmiNoHi =
612 : wuertz 271 function(year = currentYear) {
613 : wuertz 259 ans = year*10000 + 0720
614 :     timeDate(as.character(ans)) }
615 :    
616 :     JPRespectForTheAgedDay =
617 : wuertz 271 function(year = currentYear) {
618 : wuertz 259 ans = year*10000 + 0915
619 :     timeDate(as.character(ans)) }
620 :    
621 :     JPKeirouNOhi =
622 : wuertz 271 function(year = currentYear) {
623 : wuertz 259 ans = year*10000 + 0915
624 :     timeDate(as.character(ans)) }
625 :    
626 :     JPAutumnalEquinox =
627 : wuertz 271 function(year = currentYear) {
628 : wuertz 259 ans = year*10000 + 0924
629 :     timeDate(as.character(ans)) }
630 :    
631 :     JPShuubunNoHi =
632 : wuertz 271 function(year = currentYear) {
633 : wuertz 259 ans =year*10000 + 0924
634 :     timeDate(as.character(ans)) }
635 :    
636 :     JPHealthandSportsDay =
637 : wuertz 271 function(year = currentYear) {
638 : wuertz 259 ans = year*10000 + 1010
639 :     timeDate(as.character(ans)) }
640 :    
641 :     JPTaiikuNoHi =
642 : wuertz 271 function(year = currentYear) {
643 : wuertz 259 ans = year*10000 + 1010
644 :     timeDate(as.character(ans)) }
645 :    
646 :     JPNationalCultureDay =
647 : wuertz 271 function(year = currentYear) {
648 : wuertz 259 ans = year*10000 + 1103
649 :     timeDate(as.character(ans)) }
650 :    
651 :     JPBunkaNoHi =
652 : wuertz 271 function(year = currentYear) {
653 : wuertz 259 ans = year*10000 + 1103
654 :     timeDate(as.character(ans)) }
655 :    
656 :     JPThanksgivingDay =
657 : wuertz 271 function(year = currentYear) {
658 : wuertz 259 ans = year*10000 + 1123
659 :     timeDate(as.character(ans)) }
660 :    
661 :     JPKinrouKanshaNoHi =
662 : wuertz 271 function(year = currentYear) {
663 : wuertz 259 ans = year*10000 + 1123
664 :     timeDate(as.character(ans)) }
665 :    
666 :     JPEmperorsBirthday =
667 : wuertz 271 function(year = currentYear) {
668 : wuertz 259 ans = year*10000 + 1123
669 :     timeDate(as.character(ans)) }
670 :    
671 :     JPTennouTanjyouBi =
672 : wuertz 271 function(year = currentYear) {
673 : wuertz 259 ans = year*10000 + 1123
674 :     timeDate(as.character(ans)) }
675 :    
676 :     JPBankHolidayDec31 =
677 : wuertz 271 function(year = currentYear) {
678 : wuertz 259 ans = year*10000 + 1231
679 :     timeDate(as.character(ans)) }
680 :    
681 :    
682 :     ################################################################################
683 : wuertz 424 # Holiday Database:
684 :     # Copyright 1997, Diethelm Wuertz
685 :     # www.rmetrics.org
686 :     # Required "Holiday" Functions:
687 :     # "easter", ".on.or.after", ".nth.of.nday", ".last.of.nday",
688 :     # The functions return an object of class ".sdate"
689 :     # ISO-8601 formatted integers, i.e. CCYYMMDD
690 : wuertz 259
691 : wuertz 424
692 :     .holidayList =
693 :     function()
694 :     { # A function implemented by Diethelm Wuertz
695 :    
696 :     # Description:
697 :     # Prints all public and ecclestical holidays
698 :    
699 :     # Changes:
700 :     #
701 :    
702 :     # FUNCTION:
703 :    
704 :     # List:
705 :     myList = c(
706 :     "Septuagesima",
707 :     "Quinquagesima",
708 :     "AshWednesday",
709 :     "PalmSunday",
710 :     "GoodFriday",
711 :     "Easter",
712 :     "EasterSunday",
713 :     "EasterMonday",
714 :     "RogationSunday",
715 :     "Ascension",
716 :     "Pentecost",
717 :     "PentecostMonday",
718 :     "TrinitySunday",
719 :     "CorpusChristi",
720 :     "ChristTheKing",
721 :     "Advent1st",
722 :     "Advent2nd",
723 :     "Advent3rd",
724 :     "Advent4th",
725 :     "ChristmasEve",
726 :     "ChristmasDay",
727 :     "BoxingDay",
728 :     "NewYearsDay",
729 :     "SolemnityOfMary",
730 :     "Epiphany",
731 :     "PresentationOfLord",
732 :     "Annunciation",
733 :     "TransfigurationOfLord",
734 :     "AssumptionOfMary",
735 :     "BirthOfVirginMary",
736 :     "CelebrationOfHolyCross",
737 :     "MassOfArchangels",
738 :     "AllSaints",
739 :     "AllSouls",
740 :     "LaborDay",
741 :     "CHBerchtoldsDay",
742 :     "CHSechselaeuten",
743 :     "CHAscension",
744 :     "CHConfederationDay",
745 :     "CHKnabenschiessen",
746 :     "GBMayDay",
747 :     "GBBankHoliday",
748 :     "GBSummerBankHoliday",
749 :     "GBMilleniumDay",
750 :     "DEAscension",
751 :     "DECorpusChristi",
752 :     "DEGermanUnity",
753 :     "DEChristmasEve",
754 :     "DENewYearsEve",
755 :     "FRFetDeLaVictoire1945",
756 :     "FRAscension",
757 :     "FRBastilleDay",
758 :     "FRAssumptionVirginMary",
759 :     "FRAllSaints",
760 :     "FRArmisticeDay",
761 :     "ITEpiphany",
762 :     "ITLiberationDay",
763 :     "ITAssumptionOfVirginMary",
764 :     "ITAllSaints",
765 :     "ITStAmrose",
766 :     "ITImmaculateConception",
767 :     "USDecorationMemorialDay",
768 :     "USPresidentsDay",
769 :     "USNewYearsDay",
770 :     "USInaugurationDay",
771 :     "USMLKingsBirthday",
772 :     "USLincolnsBirthday",
773 :     "USWashingtonsBirthday",
774 :     "USMemorialDay",
775 :     "USIndependenceDay",
776 :     "USLaborDay",
777 :     "USColumbusDay",
778 :     "USElectionDay",
779 :     "USVeteransDay",
780 :     "USThanksgivingDay",
781 :     "USChristmasDay",
782 :     "USCPulaskisBirthday",
783 :     "USGoodFriday",
784 :     "CAVictoriaDay",
785 :     "CACanadaDay",
786 :     "CACivicProvincialHoliday",
787 :     "CALabourDay",
788 :     "CAThanksgivingDay",
789 :     "CaRemembranceDay",
790 :     "JPNewYearsDay",
791 :     "JPGantan",
792 :     "JPBankHolidayJan2",
793 :     "JPBankHolidayJan3",
794 :     "JPComingOfAgeDay",
795 :     "JPSeijinNoHi",
796 :     "JPNatFoundationDay",
797 :     "JPKenkokuKinenNoHi",
798 :     "JPGreeneryDay",
799 :     "JPMidoriNoHi",
800 :     "JPConstitutionDay",
801 :     "JPKenpouKinenBi",
802 :     "JPNationHoliday",
803 :     "JPKokuminNoKyujitu",
804 :     "JPChildrensDay",
805 :     "JPKodomoNoHi",
806 :     "JPMarineDay",
807 :     "JPUmiNoHi",
808 :     "JPRespectForTheAgedDay",
809 :     "JPKeirouNOhi",
810 :     "JPAutumnalEquinox",
811 :     "JPShuubunNoHi",
812 :     "JPHealthandSportsDay",
813 :     "JPTaiikuNoHi",
814 :     "JPNationalCultureDay",
815 :     "JPBunkaNoHi",
816 :     "JPThanksgivingDay",
817 :     "JPKinrouKanshaNoHi",
818 :     "JPEmperorsBirthday",
819 :     "JPTennouTanjyouBi",
820 :     "JPBankHolidayDec31")
821 :    
822 :     # Return Value:
823 :     ans = data.frame(matrix(sort(myList), ncol = 1))
824 :     colnames(ans) = "HOLIDAYS"
825 :     ans
826 :     }
827 :    
828 :    
829 :     # ------------------------------------------------------------------------------
830 :    
831 :    
832 :     .easter =
833 :     function(year = currentYear, shift = 0)
834 :     { # A function implemented by Diethelm Wuertz
835 :    
836 :     # Description:
837 :     # Returns dates of easter or related feasts
838 :    
839 :     # Arguments:
840 :     # year - an integer variable or vector for the year(s)
841 :     # ISO-8601 formatted as "CCYY" where easter or
842 :     # easter related feasts should be computed.
843 :     # shift - the number of days shifted from the easter
844 :     # date. Negative integers are allowed.
845 :    
846 :     # Value:
847 :     # Returns the date of Easter shifted by 'shift' days,
848 :     # ".sdate" formatted, an integer of the form CCYYMMDD.
849 :    
850 :     # Details:
851 :     # By default the date of Easter is calculated and returned
852 :     # in ISO format CCYYMMDD as an integer. Changing shift you
853 :     # can calculate easter related feasts, e.g. "shift=1" returns
854 :     # the date of Easter Monday, or "shift=-2" returns the date
855 :     # of Good Friday.
856 :    
857 :     # Examples:
858 :     # currentYear # prints current year as integer
859 :     # .easter() # date of easter this year
860 :     # .easter(2000:2009)) # easter for the 2k decade
861 :     # timeDate(.easter()) # Convert to timeDate
862 :     # class(.easter()) # what class?
863 :    
864 :     # Notes:
865 :     # The variable currentYear is set in ".FirstLib"
866 : wuertz 432 # Calls ".month.day.year" and ".sjulian"
867 : wuertz 424
868 :     # Changes:
869 :     #
870 :    
871 :     # FUNCTION:
872 :    
873 :     # Shift and Compute Easter:
874 : wuertz 432 mdy = .month.day.year(.sjulian(.easterSunday(year))+shift)
875 : wuertz 424 ans = as.integer(mdy$year*10000 + mdy$month*100 + mdy$day)
876 :    
877 :     # Classify as simple integer ISO date format CCYYMMDD
878 :     ans = timeDate(as.character(ans))
879 :    
880 :     # Return Value:
881 :     ans
882 :     }
883 :    
884 :    
885 :     # ------------------------------------------------------------------------------
886 :    
887 :    
888 :     .easterSunday =
889 :     function(year)
890 :     { # A function implemented by Diethelm Wuertz
891 :    
892 :     # Changes:
893 :     #
894 :    
895 :     # FUNCTION:
896 :    
897 :     # This algorithm holds for any year in the Gregorian Calendar,
898 :     # which (of course) means years including and after 1583
899 :     a = year%%19
900 :     b = year%/%100
901 :     c = year%%100
902 :     d = b%/%4
903 :     e = b%%4
904 :     f = (b+8)%/%25
905 :     g = (b-f+1)%/%3
906 :     h = (19*a+b-d-g+15)%%30
907 :     i = c%/%4
908 :     k = c%%4
909 :     l = (32+2*e+2*i-h-k)%%7
910 :     m = (a+11*h+22*l)%/%451
911 :     easter.month = (h+l-7*m+114)%/%31
912 :     p = (h+l-7*m+114)%%31
913 :     easter.day = p+1
914 :    
915 :     # Return Value:
916 :     year*10000 + easter.month*100 + easter.day
917 :     }
918 :    
919 :    
920 :     ################################################################################
921 :    
922 :    
923 :     .on.or.after =
924 :     function(year, month, day, nday)
925 :     { # A function implemented by Diethelm Wuertz
926 :    
927 :     # Description:
928 :     # Calculates date in month that is a nday ON OR AFTER
929 :     # date(month,day,year)
930 :    
931 :     # Arguments:
932 :     # year, month, day - calendar atoms given as integers
933 :     # in the form CCYY, MM, DD.
934 :     # nday - an integer vector with entries ranging from
935 :     # 0 (Sunday) to 6 (Saturday).
936 :    
937 :     # Value:
938 :     # The date, an object of class '.sdate' formatted as integer.
939 :    
940 :     # Example:
941 :     # What date has the first Monday on or after March 15, 1986?
942 :     # .on.or.after(1986, 3, 15, 1)
943 :    
944 :     # Changes:
945 :     #
946 :    
947 :     # FUNCTION:
948 :    
949 :     # .sdate:
950 :     ## "year*10000 + month*100 + day" +
951 :     ## (nday-day.of.week(month, day, year))%%7
952 :     .sdate = year*10000+month*100+day
953 :     ans = .sdate(.sjulian(.sdate)+(nday-day.of.week(month, day, year))%%7)
954 :    
955 :     # Return Value:
956 :     ans
957 :     }
958 :    
959 :    
960 :     # ------------------------------------------------------------------------------
961 :    
962 :    
963 :     .on.or.before =
964 :     function(year, month, day, nday)
965 :     { # A function implemented by Diethelm Wuertz
966 :    
967 :     # Description:
968 :     # Calculates date in month that is a nday ON OR BEFORE
969 :     # date(month,day,year)
970 :    
971 :     # Arguments:
972 :     # year, month, day - calendar atoms given as integers
973 :     # in the form CCYY, MM, DD.
974 :     # nday - an integer vector with entries ranging from
975 :     # 0 (Sunday) to 6 (Saturday).
976 :    
977 :     # Value:
978 :     # The date, an object of class '.sdate' formatted as integer.
979 :    
980 :     # Example:
981 :     # What date has Friday on or before April 22, 1977?
982 :     # .on.or.before(1977, 4, 22, 5)
983 :    
984 :     # Changes:
985 :     #
986 :    
987 :     # FUNCTION:
988 :    
989 :     # .sdate:
990 :     ## "year*10000 + month*100 + day" -
991 :     ## (-(nday-day.of.week(month,day,year)))%%7
992 :     .sdate = year*10000+month*100+day
993 :     ans = .sdate(.sjulian(.sdate)-(-(nday-day.of.week(month,day,year)))%%7)
994 :    
995 :     # Return Value:
996 :     ans
997 :     }
998 :    
999 :    
1000 :     # ------------------------------------------------------------------------------
1001 :    
1002 :    
1003 :     .nth.of.nday =
1004 :     function(year, month, nday, nth)
1005 :     { # A function implemented by Diethelm Wuertz
1006 :    
1007 :     # Description:
1008 :     # Calculates the "nth" ocurrance of a "nday" (nth = 1, ..., 5)
1009 :     # in "year,month"
1010 :    
1011 :     # Arguments:
1012 :     # year, month - calendar atoms given as integers
1013 :     # in the form CCYY, MM.
1014 :     # nday - an integer vector with entries ranging from
1015 :     # 0 (Sunday) to 6 (Saturday).
1016 :     # nth - an inter numbering the "n-th" ocurrance of a "nday"
1017 :    
1018 :     # Value:
1019 :     # The date, an object of class '.sdate' formatted as integer.
1020 :    
1021 :     # Example:
1022 :     # What date is the second Sunday in October 1980?
1023 :     # .nth.of.nday(1980, 10, 0, 2)
1024 :    
1025 :     # Changes:
1026 :     #
1027 :    
1028 :     # FUNCTION:
1029 :    
1030 :     # .sdate:
1031 :     ## "year*10000 + month*100" + 7*nth - 6 +
1032 :     ## (nday-day.of.week(year,month,7*nth-6))%%7
1033 :     .sdate = year*10000+month*100+1
1034 :     ans = .sdate(.sjulian(.sdate)+(nth-1)*7+(nday-day.of.week(month,1,year))%%7)
1035 :    
1036 :     # Return Value:
1037 :     ans
1038 :     }
1039 :    
1040 :    
1041 :     # ------------------------------------------------------------------------------
1042 :    
1043 :    
1044 :     .last.of.nday =
1045 :     function(year, month, lastday, nday)
1046 :     { # A function implemented by Diethelm Wuertz
1047 :    
1048 :     # Description:
1049 :     # Calculates the last "nday" in "year/month"
1050 :    
1051 :     # Arguments:
1052 :     # year, month - calendar atoms given as integers
1053 :     # in the form CCYY, MM.
1054 :     # lastday - an integer which is the last calendar day for
1055 :     # a given "month" and "year".
1056 :     # nday - an integer vector with entries ranging from
1057 :     # 0 (Sunday) to 6 (Saturday).
1058 :    
1059 :     # Value:
1060 :     # The date, an object of class '.sdate' formatted as integer.
1061 :    
1062 :     # Example:
1063 :     # What date has the last Monday in May, 1996?
1064 :     # .last.of.nday(1996, 5, 31, 1)
1065 :    
1066 :     # Changes:
1067 :     #
1068 :    
1069 :     # FUNCTION:
1070 :    
1071 :     # .sdate:
1072 :     ## "year*10000 + month*100 + lastday" -
1073 :     ## (day.of.week(year,month,lastday)-nday)%%7
1074 :     .sdate = year*10000 + month*100 + lastday
1075 :     ans = .sdate(.sjulian(.sdate)-(-(nday-day.of.week(month,lastday,year)))%%7)
1076 :    
1077 :     # Return Value:
1078 :     ans
1079 :     }
1080 :    
1081 :    
1082 :     ################################################################################
1083 :     # FUNCTION: DESCRIPTION:
1084 :     # .sdate Computes ISO-8601 dates from Julian day numbers
1085 :     # .sjulian Computes Julian day numbers from ISO-8601 dates
1086 :     # .sday.of.week Computes day of the week for ISO-8601 dates
1087 :     # .sleap.year Returns TRUE/FALSE if dates belong to leap years or not
1088 :    
1089 :    
1090 :     .sdate =
1091 :     function (julians, origin = 19600101)
1092 :     { # A function implemented by Diethelm Wuertz
1093 :    
1094 :     # Description:
1095 :     # Calculates Gregorian dates from Julian day numbers
1096 :    
1097 :     # Arguments:
1098 :     # julians - an integer variable or vector of Julian day
1099 :     # counts.
1100 :     # origin - the origin of the Julian day counter, formatted
1101 :     # in ISO-8601 date format CCYYMMDD.
1102 :    
1103 :     # Value:
1104 :     # Returns a vector of dates formatted as ".sdates", i.e.
1105 :     # CCYYMMDD integer values.
1106 :    
1107 :     # Changes:
1108 :     #
1109 :    
1110 :     # FUNCTION:
1111 :    
1112 :     # Julian Day Numbers to ISO-8601 Gregorian Dates:
1113 :     year0 = origin%/%10000
1114 :     month0 = (origin-10000*year0)%/%100
1115 :     day0 = origin-10000*year0-100*month0
1116 :    
1117 :     # Month - Day - Year Function:
1118 : wuertz 432 mdylist = .month.day.year(julians, origin = c(month0, day0, year0))
1119 : wuertz 424
1120 :     # In '.sdate' Format:
1121 :     ans = mdylist$year*10000 + mdylist$month*100 + mdylist$day
1122 :    
1123 :     # Return Value:
1124 :     class(ans) = ".sdate"
1125 :     ans
1126 :     }
1127 :    
1128 :    
1129 :     # ------------------------------------------------------------------------------
1130 :    
1131 :    
1132 : wuertz 432 .month.day.year =
1133 :     function(jul, origin = c(1, 1, 1960))
1134 :     {
1135 :     # shift = .julian(1, 1, 1960, 0)
1136 :     shift = 2436935
1137 :     j = jul + shift
1138 :     j = j - 1721119
1139 :     y = (4 * j - 1) %/% 146097
1140 :     j = 4 * j - 1 - 146097 * y
1141 :     d = j %/% 4
1142 :     j = (4 * d + 3) %/% 1461
1143 :     d = 4 * d + 3 - 1461 * j
1144 :     d = (d + 4) %/% 4
1145 :     m = (5 * d - 3) %/% 153
1146 :     d = 5 * d - 3 - 153 * m
1147 :     d = (d + 5) %/% 5
1148 :     y = 100 * y + j
1149 :     y = y + ifelse(m < 10, 0, 1)
1150 :     m = m + ifelse(m < 10, 3, -9)
1151 :     return(list(month = m, day = d, year = y))
1152 :     }
1153 :    
1154 :    
1155 :     # ------------------------------------------------------------------------------
1156 :    
1157 :    
1158 : wuertz 424 .sjulian =
1159 :     function (.sdates, origin = 19600101)
1160 :     { # A function implemented by Diethelm Wuertz
1161 :    
1162 :     # Description:
1163 :     # Calculates Julian day numbers from Gregorian ISO-8601
1164 :     # formatted dates, CCYYMMDD
1165 :    
1166 :     # Arguments:
1167 :     # .sdates - an integer variable or vector of dates, formatted
1168 :     # in ISO-8601 date format CCYYMMDD.
1169 :     # origin - the origin of the Julian day counter, formatted
1170 :     # in ISO-8601 date format CCYYMMDD.
1171 :    
1172 :     # Value:
1173 :     # Returns Julian time as days since some origin.
1174 :    
1175 :     # Changes:
1176 :     #
1177 :    
1178 :     # FUNCTION:
1179 :    
1180 :     # Convert:
1181 :     if (class(.sdates) == ".sdate") .sdates = as.vector(.sdates)
1182 :    
1183 :     # Internal Function:
1184 :     .julian = function(m, d, y, origin = c(month = 1, day = 1, year = 1960)) {
1185 :     only.origin = all(missing(m), missing(d), missing(y))
1186 :     if (only.origin) m = d = y = NULL
1187 :     nms = names(d)
1188 :     max.len = max(length(m), length(d), length(y))
1189 :     m = c(origin[1], rep(m, length = max.len))
1190 :     d = c(origin[2], rep(d, length = max.len))
1191 :     y = c(origin[3], rep(y, length = max.len))
1192 :     y = y + ifelse(m > 2, 0, -1)
1193 :     m = m + ifelse(m > 2, -3, 9)
1194 :     c = y %/% 100
1195 :     ya = y - 100 * c
1196 :     out = (146097 * c) %/% 4 + (1461 * ya) %/% 4 +
1197 :     (153 * m + 2) %/% 5 + d + 1721119
1198 :     if (!only.origin) {
1199 :     if(all(origin == 0)) out = out[-1] else out = out[-1] - out[1] }
1200 :     names(out) = nms
1201 :     out }
1202 :    
1203 :     # ISO-8601 GREGORIAN DATES TO JULIAN DAY NUMBERS:
1204 :     year = .sdates%/%10000
1205 :     month = (.sdates-10000*year)%/%100
1206 :     day = .sdates-10000*year-100*month
1207 :    
1208 :     # ISO-8601 ORIGIN:
1209 :     year0 = origin%/%10000
1210 :     month0 = (origin-10000*year0)%/%100
1211 :     day0 = origin-10000*year0-100*month0
1212 :    
1213 :     # Julian:
1214 :     ans = .julian(month, day, year, origin = c(month0, day0, year0))
1215 :    
1216 :     # Return Value:
1217 :     ans
1218 :     }
1219 :    
1220 :    
1221 :     # ------------------------------------------------------------------------------
1222 :    
1223 :    
1224 :     .sday.of.week =
1225 :     function(.sdates)
1226 :     { # A function implemented by Diethelm Wuertz
1227 :    
1228 :     # Description:
1229 :     # Calculates the day of week from an ISO-8601 formatted date
1230 :    
1231 :     # Arguments:
1232 :     # .sdates - an integer variable or vector of dates, formatted
1233 :     # in ISO-8601 date format CCYYMMDD.
1234 :    
1235 :     # Value:
1236 :     # Returns a number between 0 and 6 to specify the day of
1237 :     # the week-0 refers to Sunday.
1238 :    
1239 :     # Changes:
1240 :     #
1241 :    
1242 :     # FUNCTION:
1243 :    
1244 :     # Convert:
1245 :     if (class(.sdates) == ".sdate") .sdates = as.vector(.sdates)
1246 :    
1247 :     # Year - Month - Day:
1248 :     # Sunday 0, Monday 1, ..., Saturday 6
1249 :     year = .sdates%/%10000
1250 :     month = .sdates%/%100 - year*100
1251 :     day = .sdates - year*10000 - month*100
1252 :     a = (14-month)%/%12
1253 :     y = year - a
1254 :     m = month + 12*a - 2
1255 :    
1256 :     # Day of Week:
1257 :     ans = (day + y + y%/%4 - y%/%100 + y%/%400 + (31*m)%/%12)%%7
1258 :    
1259 :     # Return Value:
1260 :     ans
1261 :     }
1262 :    
1263 :    
1264 :     # ------------------------------------------------------------------------------
1265 :    
1266 :    
1267 :     .sleap.year =
1268 :     function(.sdates)
1269 :     { # A function implemented by Diethelm Wuertz
1270 :    
1271 :     # Description:
1272 :     # Calculates if a year is a leap year or not
1273 :     # takes the value T(rue) for leap year, otherwise F(alse)
1274 :    
1275 :     # Arguments:
1276 :     # .sdates - an integer variable or vector of dates, formatted
1277 :     # in ISO-8601 date format CCYYMMDD.
1278 :    
1279 :     # Value:
1280 :     # Returns a logical vector indicating whether the corresponding
1281 :     # year is a leap year or not.
1282 :    
1283 :     # Changes:
1284 :     #
1285 :    
1286 :     # FUNCTION:
1287 :    
1288 :     # Convert:
1289 :     if (class(.sdates) == ".sdate") .sdates = as.vector(.sdates)
1290 :    
1291 :     # Year:
1292 :     year = .sdates%/%10000
1293 :    
1294 :     # Leap Years
1295 :     ans = year %% 4 == 0 & (year %% 100 != 0 | year %% 400 == 0)
1296 :    
1297 :     # Return Value:
1298 :     ans
1299 :     }
1300 :    
1301 :    
1302 :     ################################################################################
1303 :    
1304 :    

R-Forge@R-project.org
ViewVC Help
Powered by ViewVC 1.0.0  
Thanks to:
Vienna University of Economics and Business University of Wisconsin - Madison Powered By FusionForge