60 {
61 static int const table[] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
62 auto daysInMonth = [&](int y, int m)
63 {
64 return (m == 2 &&
IsLeapYear(y)) ? 29 : table[m - 1];
65 };
66
67 int year = date.tm_year + 1900;
68 int month = date.tm_mon + 1;
69 int day = date.tm_mday;
70
71 while (day > daysInMonth(year, month))
72 {
73 day -= daysInMonth(year, month);
74 if (++month > 12)
75 {
76 month = 1;
77 ++year;
78 }
79 }
80 while (day < 1)
81 {
82 if (--month < 1)
83 {
84 month = 12;
85 --year;
86 }
87 day += daysInMonth(year, month);
88 }
89
90 date.tm_year = year - 1900;
91 date.tm_mon = month - 1;
92 date.tm_mday = day;
93 }
bool IsLeapYear(int year)
Definition HolidayDateCalculatorTest.cpp:51