8 const uint8_t LibRtc::DAYS_IN_MONTH[] = {
9 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
11 bool LibRtc::isLeapYear(
int year) {
12 if ((year % 400) == 0) {
15 if ((year % 100) == 0) {
18 if ((year % 4) == 0) {
24 void LibRtc::updateDayOfWeek(DATE* date) {
25 const static int t[] = {
26 0, 3, 2, 5, 0, 3, 5, 1, 4, 6, 2, 4 };
28 int d = date->dayOfMonth;
30 int y = date->year - (m < 3 ? 1 : 0);
32 date->dayOfWeek = (DAY_OF_WEEK) ((y + y / 4 - y / 100 + y / 400 + t[m - 1] + d) % 7);
35 void LibRtc::updateDayOfYear(DATE* date) {
37 bool leapYear = isLeapYear(date->year);
38 for (
int i = 1; i < date->month; i++) {
39 if (i == FEBRUARY && leapYear) {
40 date->dayOfYear += 29;
43 date->dayOfYear += DAYS_IN_MONTH[i - 1];
46 date->dayOfYear += date->dayOfMonth;
49 __attribute__(( weak)) void LibRtc::getCurrentDateAndTime(DATE_AND_TIME* dateAndTime) {
50 dateAndTime->date.dayOfMonth = 18;
51 dateAndTime->date.month = AUGUST;
52 dateAndTime->date.year = 2012;
53 updateDayOfWeek(&dateAndTime->date);
54 updateDayOfYear(&dateAndTime->date);
56 dateAndTime->time.ms = 0;
57 dateAndTime->time.sec = 0;
58 dateAndTime->time.min = 0;
59 dateAndTime->time.hour = 12;
62 __attribute__(( weak)) void LibRtc::setCurrentDateAndTime(DATE_AND_TIME* dateAndTime) {
66 __attribute__(( weak)) uint32_t LibRtc::getGmtUnixTime() {