Смотри что хочу (тема не для нытиков)

Они тоже европейцы

Я имел ввиду Финляндию. Но там одни алкаши.)
У нас татары не пьют, прикинь. Крымские. Правда, курят.)
Но надо же как то расслабляться! Как?

Бабы замуж за них выходят из за этого. Воняют, правда. Мыться не привыкли.(


Ещё концепт с неясным принципом работы.

Еще был бы неплох такой календарь, который можно было перевернуть перевернуть 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.

пока астрологию не запретили может и её одолеете?

Это заказ?

1 лайк

Почему именно 3-го? Пацан мой в этот день родился.) Хотели было исказить дату в роддоме.(

С этим поосторожнее. Одиссей-то почему не мог домой вернуться? Кто-то стырил у бога Хроноса из календаря день его возвращения домой. И как ему было вернуться, если дня его возращения в календаре нет? Так что, это не шутки!

Вот! Поэтому я и настоял дабы записали как положено. Хотя, казалось бы, какая разница, днём раньше - днём позже.) Ну а потом, всё должно быть по правилам. Иначе бардак.)
Правда, машину мы там ещё разбили, но это так, побочный эффект.)

https://yandex.ru/video/preview/5077177744438838996
Я календарь переверну и снова третье сентября )))

Да знаю я эту песню. Жужжат постоянно.)

На тему Шуфутинского… Давеча подстригала одноклассница… Слово за слово, оказалось что одна из… выставляет фото на яхтах в Майами. Потому что вовремя уехала в Израиль и в США затем. А ты тут хоть пропади.) Шутка.)

Все верно - за все нужно платить ))

Машину - совсем не обязательно, Мазда323 - хорошая была. По глупости если только, но жалко.( Зато весь роддом жужжал, жена рассказывала. Ага, я только платил потом.(

Платить приходится за все, и хорошо, если деньгами или как-то еще материально. Иначе плата может оказаться неподьемной…

Да. Платить нужно полюбому. Хоть явно, хоть неявно. Сам замечаю, деваться некуда.(
У нас Украина отошла России. Казалось бы, долги тоже прощаем. Ан нет. Мужики ездили в Херсон, с тем что бы рассчитаться с долгами. Хотя, казалось бы…