Holidays related to Easter: Difference between revisions

From Rosetta Code
Content added Content deleted
(include required example)
m (fix off-by-one error for holidays following easter)
Line 193: Line 193:
pfm=. 21 + 30 | _4 + 19 * 1 + 19|y
pfm=. 21 + 30 | _4 + 19 * 1 + 19|y
sn=. 6 - 7 | 4 + <.@*&1.25 y
sn=. 6 - 7 | 4 + <.@*&1.25 y
dys=. 1 41 51 51 +/~sn (] + 7 | 4 + -) pfm
dys=. 1 40 50 50 +/~sn (] + 7 | 4 + -) pfm
y,"0 1(+/\0 0 0 31 30 31 30) (I.,"0]-<:@I.{[) dys
y,"0 1(+/\0 0 0 31 30 31 30) (I.,"0]-<:@I.{[) dys
)</lang>
)</lang>
Line 201: Line 201:
<lang j> jed (400 + 100* i.17),2010 + i.11
<lang j> jed (400 + 100* i.17),2010 + i.11
400 4 1
400 4 1
400 5 11
400 5 10
400 5 21
400 5 20
400 5 21
400 5 20


500 4 2
500 4 2
500 5 12
500 5 11
500 5 22
500 5 21
500 5 22
500 5 21


600 4 10
600 4 10
600 5 20
600 5 19
600 5 30
600 5 29
600 5 30
600 5 29


700 4 11
700 4 11
700 5 21
700 5 20
700 5 31
700 5 30
700 5 31
700 5 30


800 4 19
800 4 19
800 5 29
800 5 28
800 6 8
800 6 7
800 6 8
800 6 7


900 4 20
900 4 20
900 5 30
900 5 29
900 6 9
900 6 8
900 6 9
900 6 8


1000 3 31
1000 3 31
1000 5 10
1000 5 9
1000 5 20
1000 5 19
1000 5 20
1000 5 19


1100 4 1
1100 4 1
1100 5 11
1100 5 10
1100 5 21
1100 5 20
1100 5 21
1100 5 20


1200 4 9
1200 4 9
1200 5 19
1200 5 18
1200 5 29
1200 5 28
1200 5 29
1200 5 28


1300 4 10
1300 4 10
1300 5 20
1300 5 19
1300 5 30
1300 5 29
1300 5 30
1300 5 29


1400 4 18
1400 4 18
1400 5 28
1400 5 27
1400 6 7
1400 6 6
1400 6 7
1400 6 6


1500 4 19
1500 4 19
1500 5 29
1500 5 28
1500 6 8
1500 6 7
1500 6 8
1500 6 7


1600 3 23
1600 3 23
1600 5 2
1600 5 1
1600 5 12
1600 5 11
1600 5 12
1600 5 11


1700 3 31
1700 3 31
1700 5 10
1700 5 9
1700 5 20
1700 5 19
1700 5 20
1700 5 19


1800 4 8
1800 4 8
1800 5 18
1800 5 17
1800 5 28
1800 5 27
1800 5 28
1800 5 27


1900 4 9
1900 4 9
1900 5 19
1900 5 18
1900 5 29
1900 5 28
1900 5 29
1900 5 28


2000 4 17
2000 4 17
2000 5 27
2000 5 26
2000 6 6
2000 6 5
2000 6 6
2000 6 5


2010 3 22
2010 3 22
2010 5 1
2010 4 30
2010 5 11
2010 5 10
2010 5 11
2010 5 10


2011 4 11
2011 4 11
2011 5 21
2011 5 20
2011 5 31
2011 5 30
2011 5 31
2011 5 30


2012 4 2
2012 4 2
2012 5 12
2012 5 11
2012 5 22
2012 5 21
2012 5 22
2012 5 21


2013 4 22
2013 4 22
2013 6 1
2013 5 31
2013 6 11
2013 6 10
2013 6 11
2013 6 10


2014 4 7
2014 4 7
2014 5 17
2014 5 16
2014 5 27
2014 5 26
2014 5 27
2014 5 26


2015 3 30
2015 3 30
2015 5 9
2015 5 8
2015 5 19
2015 5 18
2015 5 19
2015 5 18


2016 4 18
2016 4 18
2016 5 28
2016 5 27
2016 6 7
2016 6 6
2016 6 7
2016 6 6


2017 4 3
2017 4 3
2017 5 13
2017 5 12
2017 5 23
2017 5 22
2017 5 23
2017 5 22


2018 3 26
2018 3 26
2018 5 5
2018 5 4
2018 5 15
2018 5 14
2018 5 15
2018 5 14


2019 4 15
2019 4 15
2019 5 25
2019 5 24
2019 6 4
2019 6 3
2019 6 4
2019 6 3


2020 4 6
2020 4 6
2020 5 16
2020 5 15
2020 5 26
2020 5 25
2020 5 26</lang>
2020 5 25</lang>


=={{header|Tcl}}==
=={{header|Tcl}}==

Revision as of 17:00, 6 July 2010

Task
Holidays related to Easter
You are encouraged to solve this task according to the task description, using any language you may know.

Calculate the date of Easter, Ascension Thursday, Pentecost, Trinity Sunday & Corpus Christi feast.

As the example calculate for the first year of each century from 400 to 2100 CE and also for years 2010 to 2020 CE.

Note: From year 325 CE on, Easter Sunday is the Sunday following the first Ecclesiastical full moon not earlier than the equinox date in 325 — 21 March. The Ecclesiastical full moon does not always correspond to the astronomical full moon since in 325 fine details of Lunar dynamics were not yet fully understood.

Metonic cycle: Taking a year to be 1/19th of this 6940-day cycle gives a year length of 365 + 1/4 + 1/76 days (the unrounded cycle is much more accurate), which is slightly more than 12 synodic months. To keep the 12-month lunar year in pace with the solar year, an intercalary 13th month would have to be added on seven occasions during the nineteen-year period. Meton introduced a formula for intercalation in circa 432 BC.

ALGOL 68

Works with: ALGOL 68 version Revision 1 - no extensions to language used
Works with: ALGOL 68G version Any - tested with release 1.18.0-9h.tiny

Note: Base code specimen extracted from Algol 68 Genie Documentation Part III - Example a68g programs. <lang algol68>MODE YEAR = INT, MONTH = INT, WEEK = INT, DAY = INT;

MODE DATE = STRUCT(

 YEAR year,  #DAY year day, #
 MONTH month, DAY month day,#
 WEEK week,  #DAY week day);

FORMAT mon fmt = $c("Jan", "Feb", "Mar", "Apr", "May", "Jun",

                        "Jul", "Aug", "Sep", "Oct", "Nov", "Dec")$,

FORMAT week day fmt = $c("Sat", "Sun", "Mon", "Tue", "Wed", "Thu", "Fri")$;

PROC year days = (YEAR year)DAY: # Ignore 1752 CE for the moment #

 ( month days(year, 2) = 28 | 365 | 366 );

PROC month days = (YEAR year, MONTH month) INT:

 ( month | 31,
           28 + ABS(year MOD 4 NE 0 OR year MOD 400 EQ 0),
           31, 30, 31, 30, 31, 31, 30, 31, 30, 31);

INT year months = 12; INT week days = 7; # France 1793 to 1805 had 10 day weeks! #

OP + = (DATE in date, DAY in days)DATE:

   BEGIN # todo: eliminate loops, handle year <= 1752 #
      DAY days := in days;
      DATE date := in date;
   # Normalize the days to be less then 1 year #
      WHILE days < 0 DO
        year OF date -:= 1;
        days +:= year days(year OF date)
      OD;
      WHILE days > year days(year OF date) DO
        days -:= year days(year OF date);
        year OF date +:= 1
      OD;
      month day OF date +:= days;
   # Normalize the days to be the same month #
      WHILE month day OF date > month days(year OF date, month OF date) DO
         month day OF date -:= month days(year OF date, month OF date);
         month OF date +:= 1;
         IF month OF date > year months THEN
            month OF date -:= year months;
            year OF date +:= 1
         FI
      OD;
      week day OF date := week day(date);
      date
   END;

OP +:= = (REF DATE date, DAY in days)DATE:

  date := date + in days;

PROC easter = (YEAR year)DATE:

  BEGIN
     COMMENT
        Easter date algorithm from J.M. Oudin (1940), reprinted in:
        P.K. Seidelmann ed., "Explanatory Supplement to the Astronomical
        Almanac" [1992] (Chapter 12, "Calendars", by L.E. Doggett)
     COMMENT
     DATE date; year OF date := year;
     INT c = year OVER 100, n = year MOD 19; # 19 years: Metonic cycle #
     INT i := (c - c OVER 4 - (c - (c - 17) OVER 25) OVER 3 + 19 * n + 15) MOD 30;
     i -:= (i OVER 28) * (1 - (i OVER 28) * (29 OVER (i + 1)) * ((21 - n) OVER 11));
     INT l = i - (year + year OVER 4 + i + 2 - c + c OVER 4) MOD 7;
     month OF date := 3 + (l + 40) OVER 44;
     month day OF date := l + 28 - 31 * (month OF date OVER 4);
     week day OF date := week day(date);
     date
  END;

PROC week day = (DATE date)DAY:

  # Zeller’s Congruence algorithm from 1887. #
  BEGIN
     INT year := year OF date, month := month OF date, month day := month day OF date, c;
     (month <= 2 | (month +:= 12, year -:= 1));
     c := year OVER 100;
     year MODAB 100;
     1 + (month day + ((month + 1) * 26) OVER 10
        + year + year OVER 4 + c OVER 4 - 2 * c) MOD 7
  END;

FORMAT wdmdm fmt = $f(week day fmt)z-dxf(mon fmt)$,

MODE EASTERRELATED = STRUCT(DATE easter, ascension, pentecost, trinity, corpus christi);

PROC easter related init = (YEAR year)EASTERRELATED: BEGIN

 DATE date;
 EASTERRELATED holidays;
  1. Easter date, always a Sunday. #
  easter OF holidays := date := easter(year);
  1. Ascension day is 39 days after Easter.#
  ascension OF holidays := ( date +:= 39);
  1. Pentecost is 10 days after Ascension day.#
  pentecost OF holidays := date +:= 10;
  1. Trinity is 7 days after Pentecost.#
  trinity OF holidays := date +:= 7;
  1. Corpus Christi is 4 days after Trinity.#
  corpus christi OF holidays := date +:= 4;
  holidays

END;

  1. Note: Y10K bug here... :-) #

FORMAT easter related fmt = $g(-4)" Easter: "f(wdmdm fmt) ", Ascension: "f(wdmdm fmt)

   ", Pentecost: "f(wdmdm fmt) ", Trinity: "f(wdmdm fmt)", Corpus: "f(wdmdm fmt)$;

PROC easter related print = (YEAR year)VOID: BEGIN

 EASTERRELATED holidays = easter related init(year);
 PROC wdmdm = (DATE date)STRUCT(DAY week day, DAY month day, MONTH month):
   (week day OF date, month day OF date, month OF date);
 printf((easter related fmt, year,
    wdmdm(easter OF holidays),  wdmdm(ascension OF holidays), wdmdm(pentecost OF holidays),
    wdmdm(trinity OF holidays), wdmdm(corpus christi OF holidays),
 $l$))

END;

printf (($"Christian holidays, related to Easter, for each centennial from 400 to 2100 CE:"l$)); FOR year FROM 400 BY 100 TO 2100 DO easter related print(year) OD;

printf (($l"Christian holidays, related to Easter, for years from 2010 to 2020 CE:"l$)); FOR year FROM 2010 TO 2020 DO easter related print(year) OD</lang> Output:

Christian holidays, related to Easter, for each centennial from 400 to 2100 CE:
 400 Easter: Sun  2 Apr, Ascension: Thu 11 May, Pentecost: Sun 21 May, Trinity: Sun 28 May, Corpus: Thu  1 Jun
 500 Easter: Sun  4 Apr, Ascension: Thu 13 May, Pentecost: Sun 23 May, Trinity: Sun 30 May, Corpus: Thu  3 Jun
 600 Easter: Sun 13 Apr, Ascension: Thu 22 May, Pentecost: Sun  1 Jun, Trinity: Sun  8 Jun, Corpus: Thu 12 Jun
 700 Easter: Sun 15 Apr, Ascension: Thu 24 May, Pentecost: Sun  3 Jun, Trinity: Sun 10 Jun, Corpus: Thu 14 Jun
 800 Easter: Sun 23 Apr, Ascension: Thu  1 Jun, Pentecost: Sun 11 Jun, Trinity: Sun 18 Jun, Corpus: Thu 22 Jun
 900 Easter: Sun 28 Mar, Ascension: Thu  6 May, Pentecost: Sun 16 May, Trinity: Sun 23 May, Corpus: Thu 27 May
1000 Easter: Sun 30 Mar, Ascension: Thu  8 May, Pentecost: Sun 18 May, Trinity: Sun 25 May, Corpus: Thu 29 May
1100 Easter: Sun  8 Apr, Ascension: Thu 17 May, Pentecost: Sun 27 May, Trinity: Sun  3 Jun, Corpus: Thu  7 Jun
1200 Easter: Sun  9 Apr, Ascension: Thu 18 May, Pentecost: Sun 28 May, Trinity: Sun  4 Jun, Corpus: Thu  8 Jun
1300 Easter: Sun 18 Apr, Ascension: Thu 27 May, Pentecost: Sun  6 Jun, Trinity: Sun 13 Jun, Corpus: Thu 17 Jun
1400 Easter: Sun 20 Apr, Ascension: Thu 29 May, Pentecost: Sun  8 Jun, Trinity: Sun 15 Jun, Corpus: Thu 19 Jun
1500 Easter: Sun  1 Apr, Ascension: Thu 10 May, Pentecost: Sun 20 May, Trinity: Sun 27 May, Corpus: Thu 31 May
1600 Easter: Sun  2 Apr, Ascension: Thu 11 May, Pentecost: Sun 21 May, Trinity: Sun 28 May, Corpus: Thu  1 Jun
1700 Easter: Sun 11 Apr, Ascension: Thu 20 May, Pentecost: Sun 30 May, Trinity: Sun  6 Jun, Corpus: Thu 10 Jun
1800 Easter: Sun 13 Apr, Ascension: Thu 22 May, Pentecost: Sun  1 Jun, Trinity: Sun  8 Jun, Corpus: Thu 12 Jun
1900 Easter: Sun 15 Apr, Ascension: Thu 24 May, Pentecost: Sun  3 Jun, Trinity: Sun 10 Jun, Corpus: Thu 14 Jun
2000 Easter: Sun 23 Apr, Ascension: Thu  1 Jun, Pentecost: Sun 11 Jun, Trinity: Sun 18 Jun, Corpus: Thu 22 Jun
2100 Easter: Sun 28 Mar, Ascension: Thu  6 May, Pentecost: Sun 16 May, Trinity: Sun 23 May, Corpus: Thu 27 May

Christian holidays, related to Easter, for years from 2010 to 2020 CE:
2010 Easter: Sun  4 Apr, Ascension: Thu 13 May, Pentecost: Sun 23 May, Trinity: Sun 30 May, Corpus: Thu  3 Jun
2011 Easter: Sun 24 Apr, Ascension: Thu  2 Jun, Pentecost: Sun 12 Jun, Trinity: Sun 19 Jun, Corpus: Thu 23 Jun
2012 Easter: Sun  8 Apr, Ascension: Thu 17 May, Pentecost: Sun 27 May, Trinity: Sun  3 Jun, Corpus: Thu  7 Jun
2013 Easter: Sun 31 Mar, Ascension: Thu  9 May, Pentecost: Sun 19 May, Trinity: Sun 26 May, Corpus: Thu 30 May
2014 Easter: Sun 20 Apr, Ascension: Thu 29 May, Pentecost: Sun  8 Jun, Trinity: Sun 15 Jun, Corpus: Thu 19 Jun
2015 Easter: Sun  5 Apr, Ascension: Thu 14 May, Pentecost: Sun 24 May, Trinity: Sun 31 May, Corpus: Thu  4 Jun
2016 Easter: Sun 27 Mar, Ascension: Thu  5 May, Pentecost: Sun 15 May, Trinity: Sun 22 May, Corpus: Thu 26 May
2017 Easter: Sun 16 Apr, Ascension: Thu 25 May, Pentecost: Sun  4 Jun, Trinity: Sun 11 Jun, Corpus: Thu 15 Jun
2018 Easter: Sun  1 Apr, Ascension: Thu 10 May, Pentecost: Sun 20 May, Trinity: Sun 27 May, Corpus: Thu 31 May
2019 Easter: Sun 21 Apr, Ascension: Thu 30 May, Pentecost: Sun  9 Jun, Trinity: Sun 16 Jun, Corpus: Thu 20 Jun
2020 Easter: Sun 12 Apr, Ascension: Thu 21 May, Pentecost: Sun 31 May, Trinity: Sun  7 Jun, Corpus: Thu 11 Jun

J

Caution: This task is currently self-contradictory, thus consistent results are impossible. See the talk page for some further discussion of this issue.

That said, the only calendar where the specified date range can be meaningful is the Julian calendar, which is currently used by Eastern Christianity for determining when to celebrate easter.

However, Corpus Christi is a Western Catholic holiday. Then again, Corpus Christi was not celebrated anywhere prior to the 13th century and in some countries it is celebrated on a Thursday and in other countries it is celebrated on a Sunday. So I have chosen to ignore this holiday for now.

In Eastern Christianity, Trinity Sunday is the same day as Pentecost.

This code is based on the above rationale, and http://www.merlyn.demon.co.uk/estr-bcp.htm and the wikipedia pages referenced in the task description:

<lang j>jed=:3 :0

 pfm=. 21 + 30 | _4 + 19 * 1 + 19|y
 sn=. 6 - 7 | 4 + <.@*&1.25 y
 dys=. 1 40 50 50 +/~sn (] + 7 | 4 + -) pfm
 y,"0 1(+/\0 0 0 31 30 31 30) (I.,"0]-<:@I.{[) dys

)</lang>

Required example:

<lang j> jed (400 + 100* i.17),2010 + i.11

400 4  1
400 5 10
400 5 20
400 5 20
500 4  2
500 5 11
500 5 21
500 5 21
600 4 10
600 5 19
600 5 29
600 5 29
700 4 11
700 5 20
700 5 30
700 5 30
800 4 19
800 5 28
800 6  7
800 6  7
900 4 20
900 5 29
900 6  8
900 6  8

1000 3 31 1000 5 9 1000 5 19 1000 5 19

1100 4 1 1100 5 10 1100 5 20 1100 5 20

1200 4 9 1200 5 18 1200 5 28 1200 5 28

1300 4 10 1300 5 19 1300 5 29 1300 5 29

1400 4 18 1400 5 27 1400 6 6 1400 6 6

1500 4 19 1500 5 28 1500 6 7 1500 6 7

1600 3 23 1600 5 1 1600 5 11 1600 5 11

1700 3 31 1700 5 9 1700 5 19 1700 5 19

1800 4 8 1800 5 17 1800 5 27 1800 5 27

1900 4 9 1900 5 18 1900 5 28 1900 5 28

2000 4 17 2000 5 26 2000 6 5 2000 6 5

2010 3 22 2010 4 30 2010 5 10 2010 5 10

2011 4 11 2011 5 20 2011 5 30 2011 5 30

2012 4 2 2012 5 11 2012 5 21 2012 5 21

2013 4 22 2013 5 31 2013 6 10 2013 6 10

2014 4 7 2014 5 16 2014 5 26 2014 5 26

2015 3 30 2015 5 8 2015 5 18 2015 5 18

2016 4 18 2016 5 27 2016 6 6 2016 6 6

2017 4 3 2017 5 12 2017 5 22 2017 5 22

2018 3 26 2018 5 4 2018 5 14 2018 5 14

2019 4 15 2019 5 24 2019 6 3 2019 6 3

2020 4 6 2020 5 15 2020 5 25 2020 5 25</lang>

Tcl

<lang tcl>package require Tcl 8.5; # Advanced date handling engine

  1. Easter computation code from http://www.assa.org.au/edm.html

proc EasterDate year {

   set FirstDig [expr {$year / 100}]
   set Remain19 [expr {$year % 19}]
   # calculate Paschal Full Moon date
   set temp [expr {($FirstDig - 15)/2 + 202 - 11*$Remain19}]
   if {$FirstDig in {21 24 25 27 28 29 30 31 32 34 35 38}} {

incr temp -1

   } elseif {$FirstDig in {33 36 37 39 40}} {

incr temp -2

   }
   set temp [expr {$temp % 30}]
   set tA [expr {$temp + 21}]
   if {$temp == 29} {incr tA -1}
   if {$temp == 28 && $Remain19 > 10} {incr tA -1}
   # find the next Sunday
   set tB [expr {($tA - 19) % 7}]
   set tC [expr {(40 - $FirstDig) % 4}]
   if {$tC == 3} {incr tC}
   if {$tC > 1} {incr tC}
   set temp [expr {$year % 100}]
   set tD [expr {($temp + $temp/4) % 7}]
   set tE [expr {((20 - $tB - $tC - $tD) % 7) + 1}]
   set d [expr {$tA + $tE}]
   # return the date
   if {$d > 31} {

return [format "%02d April %04d" [expr {$d - 31}] $year]

   } else {

return [format "%02d March %04d" $d $year]

   }

}

  1. Use the Easter calculator to work out the data for the feasts

proc DateInfo year {

   set fields [format %4d: $year]\t
   set easter [clock scan [EasterDate $year] -format "%d %B %Y"]
   foreach {name delta} {

Easter 0 Ascension 39 Pentecost 49 Trinity 56 Corpus 60

   } {

set when [clock add $easter $delta days] append fields [clock format $when -format "${name}: %d %b, "]

   }
   return [string trimright $fields " ,"]

}

  1. Print the required info

puts "Christian holidays, related to Easter, for each centennial from 400 to 2100 CE:" for {set year 400} {$year <= 2100} {incr year 100} {

   puts [DateInfo $year]

} puts "" puts "Christian holidays, related to Easter, for years from 2010 to 2020 CE:" for {set year 2010} {$year <= 2020} {incr year} {

   puts [DateInfo $year]

}</lang> Output:

Christian holidays, related to Easter, for each centennial from 400 to 2100 CE:
 400:	Easter: 02 Apr,  Ascension: 11 May,  Pentecost: 21 May,  Trinity: 28 May,  Corpus: 01 Jun
 500:	Easter: 04 Apr,  Ascension: 13 May,  Pentecost: 23 May,  Trinity: 30 May,  Corpus: 03 Jun
 600:	Easter: 13 Apr,  Ascension: 22 May,  Pentecost: 01 Jun,  Trinity: 08 Jun,  Corpus: 12 Jun
 700:	Easter: 15 Apr,  Ascension: 24 May,  Pentecost: 03 Jun,  Trinity: 10 Jun,  Corpus: 14 Jun
 800:	Easter: 23 Apr,  Ascension: 01 Jun,  Pentecost: 11 Jun,  Trinity: 18 Jun,  Corpus: 22 Jun
 900:	Easter: 28 Mar,  Ascension: 06 May,  Pentecost: 16 May,  Trinity: 23 May,  Corpus: 27 May
1000:	Easter: 30 Mar,  Ascension: 08 May,  Pentecost: 18 May,  Trinity: 25 May,  Corpus: 29 May
1100:	Easter: 08 Apr,  Ascension: 17 May,  Pentecost: 27 May,  Trinity: 03 Jun,  Corpus: 07 Jun
1200:	Easter: 09 Apr,  Ascension: 18 May,  Pentecost: 28 May,  Trinity: 04 Jun,  Corpus: 08 Jun
1300:	Easter: 18 Apr,  Ascension: 27 May,  Pentecost: 06 Jun,  Trinity: 13 Jun,  Corpus: 17 Jun
1400:	Easter: 20 Apr,  Ascension: 29 May,  Pentecost: 08 Jun,  Trinity: 15 Jun,  Corpus: 19 Jun
1500:	Easter: 01 Apr,  Ascension: 10 May,  Pentecost: 20 May,  Trinity: 27 May,  Corpus: 31 May
1600:	Easter: 02 Apr,  Ascension: 11 May,  Pentecost: 21 May,  Trinity: 28 May,  Corpus: 01 Jun
1700:	Easter: 11 Apr,  Ascension: 20 May,  Pentecost: 30 May,  Trinity: 06 Jun,  Corpus: 10 Jun
1800:	Easter: 13 Apr,  Ascension: 22 May,  Pentecost: 01 Jun,  Trinity: 08 Jun,  Corpus: 12 Jun
1900:	Easter: 15 Apr,  Ascension: 24 May,  Pentecost: 03 Jun,  Trinity: 10 Jun,  Corpus: 14 Jun
2000:	Easter: 23 Apr,  Ascension: 01 Jun,  Pentecost: 11 Jun,  Trinity: 18 Jun,  Corpus: 22 Jun
2100:	Easter: 28 Mar,  Ascension: 06 May,  Pentecost: 16 May,  Trinity: 23 May,  Corpus: 27 May

Christian holidays, related to Easter, for years from 2010 to 2020 CE:
2010:	Easter: 04 Apr,  Ascension: 13 May,  Pentecost: 23 May,  Trinity: 30 May,  Corpus: 03 Jun
2011:	Easter: 24 Apr,  Ascension: 02 Jun,  Pentecost: 12 Jun,  Trinity: 19 Jun,  Corpus: 23 Jun
2012:	Easter: 08 Apr,  Ascension: 17 May,  Pentecost: 27 May,  Trinity: 03 Jun,  Corpus: 07 Jun
2013:	Easter: 31 Mar,  Ascension: 09 May,  Pentecost: 19 May,  Trinity: 26 May,  Corpus: 30 May
2014:	Easter: 20 Apr,  Ascension: 29 May,  Pentecost: 08 Jun,  Trinity: 15 Jun,  Corpus: 19 Jun
2015:	Easter: 05 Apr,  Ascension: 14 May,  Pentecost: 24 May,  Trinity: 31 May,  Corpus: 04 Jun
2016:	Easter: 27 Mar,  Ascension: 05 May,  Pentecost: 15 May,  Trinity: 22 May,  Corpus: 26 May
2017:	Easter: 16 Apr,  Ascension: 25 May,  Pentecost: 04 Jun,  Trinity: 11 Jun,  Corpus: 15 Jun
2018:	Easter: 01 Apr,  Ascension: 10 May,  Pentecost: 20 May,  Trinity: 27 May,  Corpus: 31 May
2019:	Easter: 21 Apr,  Ascension: 30 May,  Pentecost: 09 Jun,  Trinity: 16 Jun,  Corpus: 20 Jun
2020:	Easter: 12 Apr,  Ascension: 21 May,  Pentecost: 31 May,  Trinity: 07 Jun,  Corpus: 11 Jun