ARDUINO Расчет дат, дней в месяце оперрации с датами

p-a-h-a

✩✩✩✩✩✩✩
18 Фев 2019
11
6
Хочу обсудить возможные варианты расчета косательно дат, варианты библиотек и т.д
Функция возвращающая количество дней месяца:
C++:
//Функция возвращает количество дней в месяце любого года с учетом высокосных лет
byte dayOfmonth(byte Month, int Year) {
 Month += !Month - Month / 13; //если будет запрос на 0 или 13 месяц то будем считать для 1го и 12го
return !(Year % 4) * !(Month - 2) + 28 + ((0x3bbeecc >> (Month * 2)) & 3);
}
Библиотеки: RTC lib может считать текущий день недели, разницу между датами,
if (!(now.unixtime() % 900)) {код} //каждые 15 минут(900 сек) выполняем код
int val = 1 - (dt.dayOfTheWeek() + !dt.dayOfTheWeek() * 7); // возвращает день недели от 1до7.

Библиотека TimeLord позволяет вычислить время заката и восхода исходя из местоположения и часового пояса
C++:
TimeLord tardis;
      tardis.TimeZone(Time_Zone); // tell TimeLord what timezone your RTC is synchronized to. You can ignore DST
      tardis.Position(LATITUDE, LONGITUDE); // tell TimeLord where in the world we are
      byte today[] = {0, 0, 12, 5, 12, 2020};
      tardis.SunRise(today);//Время ВОСХОДА
      char timeSun[14];
      sprintf(timeSun, "%.2d:%.2d", today[tl_hour], today[tl_minute]);
      Serial.println(timeSun);

      tardis.SunSet(today);//Время ЗАКАТА
      sprintf(timeSun, "%.2d:%.2d", today[tl_hour], today[tl_minute]);
      Serial.print(timeSun);
Хотелось бы еще формулу расчета дня недели, расчета дня недели начала месяца без библиотек.
 

Вложения