Календарът изглежда прост – дванайсет месеца, дни от седмицата, празници. Но когато трябва да се превърне в програма или уебсайт, се оказва, че един и същ ден може да има няколко значения: гражданска дата, церковна дата, светци, постове и подвижни празници. Ето как изглежда тази задача от гледна точка на разработчика.
Фиксирани и подвижни празници
Фиксираните празници – Никулден на 6 декември, Коледа на 25 декември, Гергьовден на 6 май – се записват като проста двойка ден и месец. Подвижните зависят от Великден: от датата му се изчисляват Лазаровден, Връбница, Възнесение, Спасовден и Петдесетница. Затова всяка система за църковен календар започва с изчисляването на Великден.
Алгоритъмът на Гаус
Още през 1800 г. математикът Карл Фридрих Гаус публикува формула за изчисляване на датата на Великден. Оттогава са създадени различни варианти – алгоритъмът на Мийс, Джоунс и Бътчър е един от най-използваните в програмите. За православния Великден се изчислява датата по Юлианския календар и после се прибавят 13 дни, за да се получи гражданската дата за XX и XXI век.
Какво още трябва да знае системата
Освен датите, добрият календар трябва да знае и за постите – Великия, Коледния, Петровия и Богородичния, – за еднодневните постни дни, за задушниците, за паметите на светците и за различията между календарите. Всичко това се съхранява в база данни с правила, които се прилагат към всяка година.
Практичен пример
Един от добрите примери за такъв подход е онлайн календар на празниците, в който записите са подредени по месеци и дни, а предварителният календар за 2027 г. се изчислява автоматично от неподвижните празници и датата на Великден. Така данните остават последователни, а потребителят вижда ясен резултат.
Защо е важно
Календарите са пример за това как традицията и технологията се срещат. Хилядолетни правила се превеждат на езика на програмите, а резултатът е полезен на хора, които нямат представа за изчисленията зад него. Това е и добра причина да гледаме на традицията не като на нещо старо, а като на система, която продължава да работи.