用于返回给定年份的复活节日期的功能

Dan*_*Tao 25 language-agnostic datetime calendar computus

所以,这是一个有趣的小编程挑战.我正在写一个快速的方法来确定特定年份的所有市场假期,然后我开始阅读有关复活节的信息,并发现了确定其日期的逻辑是多么疯狂 - 春天之后的逾越节满月后的第一个星期日春分!有人知道现有的函数来计算给定年份的复活节日期吗?

当然,这可能并不那么难; 我想我会问,以防有人已经这样做了.(这似乎很有可能.)

更新:实际上,我真的在寻找耶稣受难日(复活节的星期五)的日期......我只是觉得复活节会让我在那里.既然我在美国,我认为我正在寻找天主教复活节?但如果我错了,也许有人可以纠正我.

*通过"疯狂"我的意思,就像,参与.没有任何令人反感的......

Ada*_*tan 30

Python:使用dateutil的easter()功能.

>>> from dateutil.easter import *
>>> print easter(2010)
2010-04-04
>>> print easter(2011)
2011-04-24
Run Code Online (Sandbox Code Playgroud)

作为参数,函数获取您喜欢的计算类型:

EASTER_JULIAN   = 1
EASTER_ORTHODOX = 2
EASTER_WESTERN  = 3
Run Code Online (Sandbox Code Playgroud)

您可以选择与美国相关的一个.

从结果中减少两天会给你耶稣受难日:

>>> from datetime import timedelta
>>> d = timedelta(days=-2)
>>> easter(2011)
datetime.date(2011, 4, 24)
>>> easter(2011)+d
datetime.date(2011, 4, 22)
Run Code Online (Sandbox Code Playgroud)

奇怪的是,有人正在迭代这个,并在Wikipedia关于算法的文章中发布结果:

替代文字


SQL*_*ace 13

在SQL Server复活节星期日看起来像这样,向下滚动为耶稣受难日

CREATE FUNCTION dbo.GetEasterSunday 
( @Y INT ) 
RETURNS SMALLDATETIME 
AS 
BEGIN 
    DECLARE     @EpactCalc INT,  
        @PaschalDaysCalc INT, 
        @NumOfDaysToSunday INT, 
        @EasterMonth INT, 
        @EasterDay INT 

    SET @EpactCalc = (24 + 19 * (@Y % 19)) % 30 
    SET @PaschalDaysCalc = @EpactCalc - (@EpactCalc / 28) 
    SET @NumOfDaysToSunday = @PaschalDaysCalc - ( 
        (@Y + @Y / 4 + @PaschalDaysCalc - 13) % 7 
    ) 

    SET @EasterMonth = 3 + (@NumOfDaysToSunday + 40) / 44 

    SET @EasterDay = @NumOfDaysToSunday + 28 - ( 
        31 * (@EasterMonth / 4) 
    ) 

    RETURN 
    ( 
        SELECT CONVERT 
        (  SMALLDATETIME, 
                 RTRIM(@Y)  
            + RIGHT('0'+RTRIM(@EasterMonth), 2)  
            + RIGHT('0'+RTRIM(@EasterDay), 2)  
        ) 
    ) 

END 
GO
Run Code Online (Sandbox Code Playgroud)

耶稣受难日是这样的,它使用上面的复活节功能

CREATE FUNCTION dbo.GetGoodFriday 
( 
    @Y INT 
) 
RETURNS SMALLDATETIME 
AS 
BEGIN 
    RETURN (SELECT dbo.GetEasterSunday(@Y) - 2) 
END 
GO
Run Code Online (Sandbox Code Playgroud)

从这里:http://web.archive.org/web/20070611150639/http : //sqlserver2000.databases.aspfaq.com/why-should-i-consider-using-an-auxiliary-calendar-table.html