У кого-либо есть хороший алгоритм для вычисления то, на что падает Великая пятница даты, учитывая год как вход? Предпочтительно в C#.
Вот отличная статья, которая поможет вам построить свой алгоритм
http://www.codeproject.com/KB/datetime/christianholidays.aspx
На основе этого примера вы сможете написать:
DateTime goodFriday = EasterSunday(DateTime.Now.Year).AddDays(-2);
Полный пример:
public static DateTime EasterSunday(int year)
{
int day = 0;
int month = 0;
int g = year % 19;
int c = year / 100;
int h = (c - (int)(c / 4) - (int)((8 * c + 13) / 25) + 19 * g + 15) % 30;
int i = h - (int)(h / 28) * (1 - (int)(h / 28) * (int)(29 / (h + 1)) * (int)((21 - g) / 11));
day = i - ((year + (int)(year / 4) + i + 2 - c + (int)(c / 4)) % 7) + 28;
month = 3;
if (day > 31)
{
month++;
day -= 31;
}
return new DateTime(year, month, day);
}
Подумайте
Поймите, что вычисление Пасхи - это то, от чего вы действительно зависите.
Исследование
Вот официальная страница Военно-морской обсерватории для расчета Пасхи.
http://aa.usno.navy.mil/faq/docs/easter.php
Выполнить
Используйте формулу для вычисления Пасхи, затем перейдите на предыдущую пятницу (или вычтите 2 дня, детали до ты).
Википедия знает: http://en.wikipedia.org/wiki/Good_Friday#Calculating_the_date
Страстная пятница - это пятница перед Пасхой, который рассчитывается по-разному в восточном христианстве и западном христианстве (подробности см. в Computus ). Пасха приходится на первое воскресенье после пасхального полнолуния, полнолуние 21 марта или позднее, которое считается датой весеннего равноденствия. Западный расчет использует григорианский календарь, а восточный расчет использует юлианский календарь, 21 марта которого теперь соответствует 3 апреля григорианского календаря. Расчеты для определения даты полнолуния также различаются. См. «Метод пасхальных свиданий» (Астрономическое общество Южной Австралии).
В восточном христианстве Пасха может приходиться на период с 22 марта по 25 апреля по юлианскому календарю (таким образом, с 4 апреля по 8 мая по григорианскому календарю, в период с 1900 по 2099 год), поэтому Страстная пятница может приходиться на 20 марта. и 23 апреля включительно (или со 2 апреля по 6 мая по григорианскому календарю). (См. Пасха .)
Попробуйте это:
// test code:
Console.WriteLine(CalcGoodFri(2008));
Console.WriteLine(CalcGoodFri(2009));
Console.WriteLine(CalcGoodFri(2010));
private static DateTime CalcGoodFri(int yr)
{
//int yr = 2010; // The year for which to determine the date of Good Friday.
int a = yr % 19;
int b = yr / 100;
int c = yr % 100;
int d = b / 4;
int e = b % 4;
int i = c / 4;
int k = c % 4;
int g = (8 * b + 13) / 25;
int h = ((19 * a) + b - d - g + 15) % 30;
int l = ((2 * e) + (2 * i) - k + 32 - h) % 7;
int m = (a + (11*h) + (19*l)) / 433;
int days_to_good_friday = h + l - (7*m) - 2;
int mo = (days_to_good_friday + 90) / 25;
int da = (days_to_good_friday + (33 * mo) + 19) % 32;
return new DateTime ( yr, mo, da) ; // Returns the date of Good Friday
}
Логика портирована отсюда: http://www.kenhamady.com/form25.shtml