我如何计算耶稣受难日的日期,给定一年?

Bry*_*nny 34 c# algorithm date date-arithmetic computus

有没有人有一个很好的算法来计算耶稣受难日的日期作为输入?最好是在C#中.

hun*_*ter 56

这是一篇很棒的文章,可以帮助您构建算法

http://www.codeproject.com/KB/datetime/christianholidays.aspx

基于这个例子,你应该能够写:

DateTime goodFriday = EasterSunday(DateTime.Now.Year).AddDays(-2);
Run Code Online (Sandbox Code Playgroud)

完整示例:

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);
}
Run Code Online (Sandbox Code Playgroud)

  • g是19年农历周期内的位置; 被称为黄金数字.c是世纪.h是昼夜平分点和下一个满月之间的天数.很确定我是昼夜平分点满月和满月后第一个星期日之间的天数. (9认同)
  • @Hunter:`yearMod19`比`g`更有用! (3认同)

Kel*_*nch 7

不要重复自己

认为

意识到计算复活节是你真正依赖的.

研究

这是用于计算复活节的官方海军天文台页面.

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

执行

使用公式计算复活节然后转移到上周五(或减去2天,详细信息由您决定).

  • 然后意识到东正教和天主教的复活节 - 星期日(在不同的日期):无价 (9认同)