Как я могу вычислить, какая Великая пятница даты падает на, учитывая год?

У кого-либо есть хороший алгоритм для вычисления то, на что падает Великая пятница даты, учитывая год как вход? Предпочтительно в C#.

34
задан Ian Kemp 31 March 2016 в 08:07
поделиться

4 ответа

Вот отличная статья, которая поможет вам построить свой алгоритм

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);
}
56
ответ дан 27 November 2019 в 16:41
поделиться

Не повторяйтесь

Подумайте

Поймите, что вычисление Пасхи - это то, от чего вы действительно зависите.

Исследование

Вот официальная страница Военно-морской обсерватории для расчета Пасхи.

http://aa.usno.navy.mil/faq/docs/easter.php

Выполнить

Используйте формулу для вычисления Пасхи, затем перейдите на предыдущую пятницу (или вычтите 2 дня, детали до ты).

7
ответ дан 27 November 2019 в 16:41
поделиться

Википедия знает: http://en.wikipedia.org/wiki/Good_Friday#Calculating_the_date

Страстная пятница - это пятница перед Пасхой, который рассчитывается по-разному в восточном христианстве и западном христианстве (подробности см. в Computus ). Пасха приходится на первое воскресенье после пасхального полнолуния, полнолуние 21 марта или позднее, которое считается датой весеннего равноденствия. Западный расчет использует григорианский календарь, а восточный расчет использует юлианский календарь, 21 марта которого теперь соответствует 3 апреля григорианского календаря. Расчеты для определения даты полнолуния также различаются. См. «Метод пасхальных свиданий» (Астрономическое общество Южной Австралии).

В восточном христианстве Пасха может приходиться на период с 22 марта по 25 апреля по юлианскому календарю (таким образом, с 4 апреля по 8 мая по григорианскому календарю, в период с 1900 по 2099 год), поэтому Страстная пятница может приходиться на 20 марта. и 23 апреля включительно (или со 2 апреля по 6 мая по григорианскому календарю). (См. Пасха .)

2
ответ дан 27 November 2019 в 16:41
поделиться

Попробуйте это:

// 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

1
ответ дан 27 November 2019 в 16:41
поделиться
Другие вопросы по тегам:

Похожие вопросы: