Они тоже европейцы
Я имел ввиду Финляндию. Но там одни алкаши.)
У нас татары не пьют, прикинь. Крымские. Правда, курят.)
Но надо же как то расслабляться! Как?
Бабы замуж за них выходят из за этого. Воняют, правда. Мыться не привыкли.(
Еще был бы неплох такой календарь, который можно было перевернуть перевернуть 3-го сентября.
Еще одна идея: календарь-будильник совмещенный с наливатором.
В 7:40 начинает играть тематическая мелодия дня (например “Расплескалась синева, расплескалась.”), в заранее подготовленную тару наливается подходящий празднику напиток.
Надо ещё одна кнопка - “Листать” к кнопке “Оторвать или Сегодня”.
Чёт вас так на календарь пробило? Ладно, внесу свою лепту, что б не говорили, что сачкую от общественных веяний.
Библиотека, считающая даты православной Пасхи и переходных двунадесятых праздников на заданный год. Всяко в порядочном календаре должна быть, как же без неё?
Тестовый файл OrthodoxEaster.ino
#include "OrthodoxEaster.h"
void setup(void) {
Serial.begin(9600);
Serial.println("=== Пасхалия 2020 - 2030 ===");
Serial.println();
for(uint16_t year = 2020; year <= 2030; year++) {
OrthodoxFeasts feasts(year);
Serial.println(feasts);
}
}
void loop(void) {}
Файл OrthodoxEaster.h
#ifndef ORTHODOX_EASTER_H
#define ORTHODOX_EASTER_H
#include <time.h>
//
// Константу ниже следует установить в false, если
// потоковый вывод (в Serial или ещё куда) не нужен
//
#define NEEDS_SERIAL_OUTPUT true
extern time_t orthodoxEaster(const int16_t year);
//
// Двунадесятые переходящие праздники
// Можно вызывать с параметром год или с параметром - готовая дата Пасхи
//
// День Святой Троицы (50-й день после Пасхи)
static inline time_t orthodoxTrinityDay(const time_t easter) { return easter + ONE_DAY * 49; }
static inline time_t orthodoxTrinityDay(const int16_t year) { return orthodoxTrinityDay(orthodoxEaster(year)); }
//
// Вознесение Господне (40-й день после Пасхи)
static inline time_t orthodoxAscension(const time_t easter) { return easter + ONE_DAY * 39; }
static inline time_t orthodoxAscension(const int16_t year) { return orthodoxAscension(orthodoxEaster(year)); }
//
// Вход Господень в Иерусалим (за неделю до Пасхи)
static inline time_t orthodoxPalmSunday(const time_t easter) { return easter - ONE_DAY * 7; }
static inline time_t orthodoxPalmSunday(const int16_t year) { return orthodoxPalmSunday(orthodoxEaster(year)); }
//
// Все праздники как структура
// Год конструктору передаётся полнстью (с веком)
//
struct OrthodoxFeasts
#if NEEDS_SERIAL_OUTPUT
: public Printable
#endif
{
//
// Сначала должна быть описано (и проинициализировано) свойтво easterDay т.к. всё остальное инициализируется
// через него. При этом порядок инициализации определён в стандарте ISO/IEC 14882:2020 § 11.10.3 (13.3)
// "non-static data members are initialized IN THE ORDER THEY WERE DECLARED in the class definition"
//
const time_t easterDay, trinityDay, ascensionDay, palmSunday;
const uint16_t year;
OrthodoxFeasts(const uint16_t _year) :
easterDay(orthodoxEaster(_year)),
trinityDay(orthodoxTrinityDay(easterDay)),
ascensionDay(orthodoxAscension(easterDay)),
palmSunday(orthodoxPalmSunday(easterDay)),
year(_year) {}
#if NEEDS_SERIAL_OUTPUT
size_t printTo(Print& p) const {
size_t res = p.println(year);
char szBuffer[80];
formatDate("Светлое Христово Воскресение", easterDay, szBuffer);
res += p.println(szBuffer);
formatDate("День Святой Троицы", trinityDay, szBuffer);
res += p.println(szBuffer);
formatDate("Вознесение Господне", ascensionDay, szBuffer);
res += p.println(szBuffer);
formatDate("Вход Господень в Иерусалим", palmSunday, szBuffer);
res += p.println(szBuffer);
return res;
}
private:
void formatDate(const char * szTitile, const time_t day, char * szBuffer) const {
const struct tm * pTM = localtime(& day);
sprintf(szBuffer, "%s: %02d.%02d.%04d", szTitile, pTM->tm_mday, pTM->tm_mon + 1, pTM->tm_year + 1900);
}
#endif // #if NEEDS_SERIAL_OUTPUT
};
#endif // ORTHODOX_EASTER_H
Файл OrthodoxEaster.cpp
/////////////////////////////////////////////////////////////////////////////
//
// Расчёт даты православной Пасхи по году (Александрийская Пасхалия)
// Результат выдаётся по Григорианскому календарю (по новому стилю)
//
// Используется слегка модифицированный алгоритм Гаусса
//
// 1. a = Year % 19
// 2. b = Year % 4
// 3. c = Year % 7
// 4. d = (19 * a + 15) % 30
// 5. e = (2 * b + 4 * c + 6 * d + 6) % 7
// 6. yd = 50 + isleap(year) + (d + e) + j2g(year)
// где:
// isleap равно 1, если год високосный и 0 в противном случае
// j2g - разница в днях между григорианским и юлианским календарями в данном веке
// td - номер дня в году на который приходится Пасха. При этом первым днём считается
// первое февраля (чтобы день гарантированно помещался в int8_t)
// Всю остальную работу сделает mktime
//
//
#include <Arduino.h>
#include "OrthodoxEaster.h"
//
// XX_XXI_CENTURIES если её установить в true, даёт некоторую оптимизацию
// но при этом ограничивает возможные значение года диапазоном 1900-2099
//
#define XX_XXI_CENTURIES true
#if XX_XXI_CENTURIES
static constexpr int8_t j2g(const int16_t year __attribute__ ((unused))) {
return 13;
}
#else
static inline int8_t j2g(const int16_t year) {
if (year < 1500) return 0;
const uint8_t agem16 = year / 100 - 16;
return 10 + agem16 - (agem16 / 4);
}
#endif
time_t orthodoxEaster(const int16_t year) {
const uint8_t d = (19 * (year % 19) + 15) % 30;
const uint8_t e = (2 * (year % 4) + 4 * (year % 7) + 6 * d + 6) % 7;
struct tm theTm = {
.tm_sec = 0, .tm_min = 0, .tm_hour = 0,
.tm_mday = static_cast<int8_t>(50 + is_leap_year(year) + (d + e) + j2g(year)),
.tm_wday = 0, .tm_mon = 1, .tm_year = year - 1900, .tm_yday = 0, .tm_isdst = 0
};
return mktime(& theTm);
}
Результат запуска теста в мониторе порта
=== Пасхалия 2020 - 2030 ===
2020
Светлое Христово Воскресение: 19.04.2020
День Святой Троицы: 07.06.2020
Вознесение Господне: 28.05.2020
Вход Господень в Иерусалим: 12.04.2020
2021
Светлое Христово Воскресение: 02.05.2021
День Святой Троицы: 20.06.2021
Вознесение Господне: 10.06.2021
Вход Господень в Иерусалим: 25.04.2021
2022
Светлое Христово Воскресение: 24.04.2022
День Святой Троицы: 12.06.2022
Вознесение Господне: 02.06.2022
Вход Господень в Иерусалим: 17.04.2022
2023
Светлое Христово Воскресение: 16.04.2023
День Святой Троицы: 04.06.2023
Вознесение Господне: 25.05.2023
Вход Господень в Иерусалим: 09.04.2023
2024
Светлое Христово Воскресение: 05.05.2024
День Святой Троицы: 23.06.2024
Вознесение Господне: 13.06.2024
Вход Господень в Иерусалим: 28.04.2024
2025
Светлое Христово Воскресение: 20.04.2025
День Святой Троицы: 08.06.2025
Вознесение Господне: 29.05.2025
Вход Господень в Иерусалим: 13.04.2025
2026
Светлое Христово Воскресение: 12.04.2026
День Святой Троицы: 31.05.2026
Вознесение Господне: 21.05.2026
Вход Господень в Иерусалим: 05.04.2026
2027
Светлое Христово Воскресение: 02.05.2027
День Святой Троицы: 20.06.2027
Вознесение Господне: 10.06.2027
Вход Господень в Иерусалим: 25.04.2027
2028
Светлое Христово Воскресение: 16.04.2028
День Святой Троицы: 04.06.2028
Вознесение Господне: 25.05.2028
Вход Господень в Иерусалим: 09.04.2028
2029
Светлое Христово Воскресение: 08.04.2029
День Святой Троицы: 27.05.2029
Вознесение Господне: 17.05.2029
Вход Господень в Иерусалим: 01.04.2029
2030
Светлое Христово Воскресение: 28.04.2030
День Святой Троицы: 16.06.2030
Вознесение Господне: 06.06.2030
Вход Господень в Иерусалим: 21.04.2030
Кстати, подновил эту библиотеку на гитеверсе, добавил тестовый файл и метод printTo
.
пока астрологию не запретили может и её одолеете?
Это заказ?
Почему именно 3-го? Пацан мой в этот день родился.) Хотели было исказить дату в роддоме.(
С этим поосторожнее. Одиссей-то почему не мог домой вернуться? Кто-то стырил у бога Хроноса из календаря день его возвращения домой. И как ему было вернуться, если дня его возращения в календаре нет? Так что, это не шутки!
Вот! Поэтому я и настоял дабы записали как положено. Хотя, казалось бы, какая разница, днём раньше - днём позже.) Ну а потом, всё должно быть по правилам. Иначе бардак.)
Правда, машину мы там ещё разбили, но это так, побочный эффект.)
https://yandex.ru/video/preview/5077177744438838996
Я календарь переверну и снова третье сентября )))
Да знаю я эту песню. Жужжат постоянно.)
На тему Шуфутинского… Давеча подстригала одноклассница… Слово за слово, оказалось что одна из… выставляет фото на яхтах в Майами. Потому что вовремя уехала в Израиль и в США затем. А ты тут хоть пропади.) Шутка.)
Все верно - за все нужно платить ))
Машину - совсем не обязательно, Мазда323 - хорошая была. По глупости если только, но жалко.( Зато весь роддом жужжал, жена рассказывала. Ага, я только платил потом.(
Платить приходится за все, и хорошо, если деньгами или как-то еще материально. Иначе плата может оказаться неподьемной…
Да. Платить нужно полюбому. Хоть явно, хоть неявно. Сам замечаю, деваться некуда.(
У нас Украина отошла России. Казалось бы, долги тоже прощаем. Ан нет. Мужики ездили в Херсон, с тем что бы рассчитаться с долгами. Хотя, казалось бы…