add a better method to calculate easter sunday
This commit is contained in:
@@ -10,16 +10,58 @@
|
|||||||
|
|
||||||
.. moduleauthor:: Daniel Weschke <daniel.weschke@directbox.de>
|
.. moduleauthor:: Daniel Weschke <daniel.weschke@directbox.de>
|
||||||
"""
|
"""
|
||||||
|
import datetime
|
||||||
|
|
||||||
|
def computus_anonymous_gregorian(year):
|
||||||
|
"""Computus anonymous Gregorian algorithm or Meeus/Jones/Butcher
|
||||||
|
algorithm.
|
||||||
|
|
||||||
|
:param year: the year to calculate the Easter Sunday
|
||||||
|
:type year: int
|
||||||
|
|
||||||
|
:returns: the day of Easter Sunday
|
||||||
|
:rtype: datetime.date
|
||||||
|
|
||||||
|
For Gregorian calendar (1583 and onward)
|
||||||
|
Works without exeptions.
|
||||||
|
|
||||||
|
Published
|
||||||
|
1876 by Anonymous in Nature
|
||||||
|
1877 by Samuel Butcher in The Ecclesiastical Calendar
|
||||||
|
1916 by Arthur Downing in The Observatory
|
||||||
|
1922 by Harold Spencer Jones in General Astronomy
|
||||||
|
1988 by Peter Duffett-Smith in Practical Astronomy with your Calculator
|
||||||
|
1991 by Jean Meeus in Astronomical Algorithms
|
||||||
|
|
||||||
|
source: https://de.wikipedia.org/wiki/Spencers_Osterformel
|
||||||
|
source: https://en.wikipedia.org/wiki/Computus#Anonymous_Gregorian_algorithm
|
||||||
|
"""
|
||||||
|
a = year % 19
|
||||||
|
b = year // 100
|
||||||
|
c = year % 100
|
||||||
|
d = b // 4
|
||||||
|
e = b % 4
|
||||||
|
f = (b + 8) // 25
|
||||||
|
g = (b - f + 1) // 3
|
||||||
|
h = (19 * a + b - d - g + 15) % 30
|
||||||
|
i = c // 4
|
||||||
|
k = c % 4
|
||||||
|
l = (32 + 2 * e + 2 * i - h - k) % 7
|
||||||
|
m = (a + 11 * h + 22 * l) // 451
|
||||||
|
n = (h + l - 7 * m + 114) // 31
|
||||||
|
o = (h + l - 7 * m + 114) % 31
|
||||||
|
return datetime.date(year, n, o + 1)
|
||||||
|
|
||||||
|
# was not correct for 2020
|
||||||
def gaußsche_osterformel(year):
|
def gaußsche_osterformel(year):
|
||||||
"""Gaußsche Osterformel.
|
"""Gaußsche Osterformel.
|
||||||
|
|
||||||
:param year: the year to calculate the Easter Sunday
|
:param year: the year to calculate the Easter Sunday
|
||||||
:type year: int
|
:type year: int
|
||||||
|
|
||||||
:returns: the day of Easter Sunday as a day in march.
|
:returns: the day of Easter Sunday (computed as a day in march).
|
||||||
:rtype: int
|
:rtype: datetime.date
|
||||||
|
|
||||||
:ivar X: Das Jahr / year
|
:ivar X: Das Jahr / year
|
||||||
:vartype X: int
|
:vartype X: int
|
||||||
:ivar K(X): Die Säkularzahl
|
:ivar K(X): Die Säkularzahl
|
||||||
@@ -42,7 +84,7 @@ def gaußsche_osterformel(year):
|
|||||||
:vartype OE(OG,SZ): int
|
:vartype OE(OG,SZ): int
|
||||||
:ivar OS(OG,OE): Das Datum des Ostersonntags als Märzdatum (32. März = 1. April usw.)
|
:ivar OS(OG,OE): Das Datum des Ostersonntags als Märzdatum (32. März = 1. April usw.)
|
||||||
:vartype OS(OG,OE): int
|
:vartype OS(OG,OE): int
|
||||||
|
|
||||||
Algorithmus gilt für den Gregorianischen Kalender.
|
Algorithmus gilt für den Gregorianischen Kalender.
|
||||||
|
|
||||||
source: https://de.wikipedia.org/wiki/Gau%C3%9Fsche_Osterformel
|
source: https://de.wikipedia.org/wiki/Gau%C3%9Fsche_Osterformel
|
||||||
@@ -58,30 +100,29 @@ def gaußsche_osterformel(year):
|
|||||||
sz = 7 - (x + x // 4 + s) % 7
|
sz = 7 - (x + x // 4 + s) % 7
|
||||||
oe = 7 - (og - sz) % 7
|
oe = 7 - (og - sz) % 7
|
||||||
os = og + oe
|
os = og + oe
|
||||||
return os
|
|
||||||
|
march = datetime.date(year, 3, 1)
|
||||||
|
day = march + datetime.timedelta(days=os)
|
||||||
|
return day
|
||||||
|
|
||||||
def easter_sunday(year):
|
def easter_sunday(year):
|
||||||
"""Easter Sunday.
|
"""Easter Sunday.
|
||||||
|
|
||||||
:param year: the year to calculate the Easter Sunday
|
:param year: the year to calculate the Easter Sunday
|
||||||
:type year: int
|
:type year: int
|
||||||
|
|
||||||
:returns: the day of Easter Sunday
|
:returns: the day of Easter Sunday
|
||||||
:rtype: datetime.date"""
|
:rtype: datetime.date"""
|
||||||
import datetime
|
return computus_anonymous_gregorian(year)
|
||||||
march = datetime.date(year, 3, 1)
|
|
||||||
day = march + datetime.timedelta(days=gaußsche_osterformel(year))
|
|
||||||
return day
|
|
||||||
|
|
||||||
def easter_friday(year):
|
def easter_friday(year):
|
||||||
"""Easter Friday.
|
"""Easter Friday.
|
||||||
|
|
||||||
:param year: the year to calculate the Easter Friday
|
:param year: the year to calculate the Easter Friday
|
||||||
:type year: int
|
:type year: int
|
||||||
|
|
||||||
:returns: the day of Easter Friday
|
:returns: the day of Easter Friday
|
||||||
:rtype: datetime.date"""
|
:rtype: datetime.date"""
|
||||||
import datetime
|
|
||||||
day = easter_sunday(year) + datetime.timedelta(days=-2)
|
day = easter_sunday(year) + datetime.timedelta(days=-2)
|
||||||
return day
|
return day
|
||||||
|
|
||||||
@@ -90,10 +131,9 @@ def easter_monday(year):
|
|||||||
|
|
||||||
:param year: the year to calculate the Easter Monday
|
:param year: the year to calculate the Easter Monday
|
||||||
:type year: int
|
:type year: int
|
||||||
|
|
||||||
:returns: the day of Easter Monday
|
:returns: the day of Easter Monday
|
||||||
:rtype: datetime.date"""
|
:rtype: datetime.date"""
|
||||||
import datetime
|
|
||||||
day = easter_sunday(year) + datetime.timedelta(days=+1)
|
day = easter_sunday(year) + datetime.timedelta(days=+1)
|
||||||
return day
|
return day
|
||||||
|
|
||||||
@@ -102,10 +142,9 @@ def ascension_of_jesus(year):
|
|||||||
|
|
||||||
:param year: the year to calculate the ascension of Jesus
|
:param year: the year to calculate the ascension of Jesus
|
||||||
:type year: int
|
:type year: int
|
||||||
|
|
||||||
:returns: the day of ascension of Jesus
|
:returns: the day of ascension of Jesus
|
||||||
:rtype: datetime.date"""
|
:rtype: datetime.date"""
|
||||||
import datetime
|
|
||||||
day = easter_sunday(year) + datetime.timedelta(days=+39)
|
day = easter_sunday(year) + datetime.timedelta(days=+39)
|
||||||
return day
|
return day
|
||||||
|
|
||||||
@@ -114,9 +153,8 @@ def pentecost(year):
|
|||||||
|
|
||||||
:param year: the year to calculate the Pentecost
|
:param year: the year to calculate the Pentecost
|
||||||
:type year: int
|
:type year: int
|
||||||
|
|
||||||
:returns: the day of Pentecost
|
:returns: the day of Pentecost
|
||||||
:rtype: datetime.date"""
|
:rtype: datetime.date"""
|
||||||
import datetime
|
|
||||||
day = easter_sunday(year) + datetime.timedelta(days=+49)
|
day = easter_sunday(year) + datetime.timedelta(days=+49)
|
||||||
return day
|
return day
|
||||||
|
|||||||
Reference in New Issue
Block a user