# Easter change month

## Question:

I need to print every Easter Sunday of 21st century. I need to determine the month: 4 (April) when the day `d` is no more than 30; if it’s greater, then I need to convert that to the proper day in May. For instance, `d=32` would be `m=5, d=2` or May 2.

``````import calendar
import datetime

def easter():
for y in range(2001, 2101):
m2 = 2 * (y % 4)
m4 = 4 * (y % 7)
m19 = 19 * (y % 19)
v2 = (16 + m19) % 30
v1 = (6 * v2 + m4 + m2) % 7
p = v1 + v2
d = 3 + p
print ('Easter Sunday for the year', y, 'is',
datetime.date(2015, m, 1).strftime('%B'),
'{}.'.format(int(d)))

easter()
``````

You have only one adjustment to make: if the day is more than 30, increment the month from April to May and reduce the day by 30:

``````    if d <= 30:
m, d = 4, d
else:
m, d = 5, d-30

print("Easter Sunday for the year", y, "is",
datetime.date(y, m, d).
strftime('%B'), '{}.'.format(int(d)))
``````

Partial output, including the borderline cases:

``````Easter Sunday for the year 2073 is April 30.
Easter Sunday for the year 2074 is April 22.
Easter Sunday for the year 2075 is April 7.
Easter Sunday for the year 2076 is April 26.
Easter Sunday for the year 2077 is April 18.
Easter Sunday for the year 2078 is May 8.
...
Easter Sunday for the year 2088 is April 18.
Easter Sunday for the year 2089 is May 1.
``````

Easter Day, also known as Resurrection Sunday, is one of the most significant Christian holidays. This day marks the resurrection of Jesus Christ from the dead, which is believed to have occurred three days after his crucifixion on Good Friday. Easter is celebrated all over the world by Christians and non-Christians alike, with various traditions and customs associated with the holiday.

Categories: questions Tags: ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.