1 | ;+ |
---|
2 | ; |
---|
3 | ; @file_comments |
---|
4 | ; determine whether the input year is a leap year or not |
---|
5 | ; Very useful for finding number of days in a year. |
---|
6 | ; eg. NUM_DAYS_IN_YR = 365 + leapyr(year) |
---|
7 | ; |
---|
8 | ; @categories |
---|
9 | ; Calendar |
---|
10 | ; |
---|
11 | ; @param year {in}{required} {type= scalar or array} |
---|
12 | ; year to be tested as a leap year. |
---|
13 | ; |
---|
14 | ; @returns |
---|
15 | ; 0 then not a leap year, 1 then year is a leap year |
---|
16 | ; with the same number of elements than year. |
---|
17 | ; |
---|
18 | ; @uses |
---|
19 | ; <pro>cm_4cal</pro> |
---|
20 | ; |
---|
21 | ; @examples |
---|
22 | ; IDL> result = leapyr(2000) |
---|
23 | ; |
---|
24 | ; @history |
---|
25 | ; |
---|
26 | ; Originally Written by: Trevor Harris, Physics Dept., University of Adelaide, |
---|
27 | ;20/09/88 |
---|
28 | ; |
---|
29 | ; November 2004: correction for century years... S. Masson; |
---|
30 | ; |
---|
31 | ; Every year divisible by 4 is a leap year. |
---|
32 | ; But every year divisible by 100 is NOT a leap year |
---|
33 | ; Unless the year is also divisible by 400, then it is still a |
---|
34 | ; leap year. |
---|
35 | ; This means that year 1800, 1900, 2100, 2200, 2300 and 2500 are |
---|
36 | ; NOT leap years, while year 2000 and 2400 are leap years. |
---|
37 | ; + supress the automatic change 89 -> 1989 |
---|
38 | ; |
---|
39 | ; June 2005 update for new commons, Sebastien Masson. |
---|
40 | ; |
---|
41 | ; @version |
---|
42 | ; $Id$ |
---|
43 | ; |
---|
44 | ;- |
---|
45 | FUNCTION leapyr, year |
---|
46 | ; |
---|
47 | compile_opt idl2, strictarrsubs |
---|
48 | ; |
---|
49 | @cm_4cal |
---|
50 | yr = long(year) |
---|
51 | IF n_elements(key_caltype) EQ 0 THEN key_caltype = 'greg' |
---|
52 | ; |
---|
53 | IF key_caltype NE 'greg' THEN BEGIN |
---|
54 | sd = size(yr, /dimensions) |
---|
55 | IF sd[0] EQ 0 THEN return, 0b ELSE return, bytarr(size(yr, /dimensions)) |
---|
56 | ENDIF ELSE return, (yr MOD 4 EQ 0)*((yr MOD 100 NE 0) + (yr MOD 400 EQ 0)) |
---|
57 | |
---|
58 | end |
---|