1 /*
2 * Copyright (C) 1995. Bill Brown <brown@gis.uiuc.edu> & Michael Shapiro
3 *
4 * This program is free software under the GPL (>=v2)
5 * Read the file GPL.TXT coming with GRASS for details.
6 */
7 #include <grass/datetime.h>
8
9
10 /*!
11 * \brief
12 *
13 * \param year
14 * \param ad
15 * \return int
16 */
17
datetime_is_leap_year(int year,int ad)18 int datetime_is_leap_year(int year, int ad)
19 {
20 if (year == 0)
21 return datetime_error(-1, "datetime_is_leap_year(): illegal year");
22 if (!ad)
23 return 0; /* BC */
24 if (year < 0)
25 return 0; /* ?? */
26
27 return ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0);
28 }
29
30
31 /*!
32 * \brief
33 *
34 * returns the number of days in 'year'
35 *
36 * \param year
37 * \param ad
38 * \return int
39 */
40
datetime_days_in_year(int year,int ad)41 int datetime_days_in_year(int year, int ad)
42 {
43 if (year == 0)
44 return datetime_error(-1, "datetime_days_in_year(): illegal year");
45
46 if (datetime_is_leap_year(year, ad))
47 return 366;
48 else
49 return 365;
50 }
51
52
53 /*!
54 * \brief
55 *
56 * returns number of days in 'month' of a particular 'year'
57 *
58 * \param month
59 * \param year
60 * \param ad
61 * \return int
62 */
63
datetime_days_in_month(int year,int month,int ad)64 int datetime_days_in_month(int year, int month, int ad)
65 {
66 static int days[12] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
67
68 if (month < 1 || month > 12)
69 return datetime_error(-1, "datetime_days_in_month(): illegal month");
70
71 if (month == 2 && datetime_is_leap_year(year, ad))
72 return (29);
73
74 return (days[month - 1]);
75 }
76