Easter - compute the day on which Easter falls in Java

Description

The following code shows how to easter - compute the day on which Easter falls.

Example


/*www . j  a  v a 2s .c  o  m*/
import java.util.Calendar;
import java.util.GregorianCalendar;

/**
 * Easter - compute the day on which Easter falls.
 * 
 * In the Christian religion, Easter is possibly the most important holiday of
 * the year, so getting its date <I>just so </I> is worthwhile.
 * 
 * @author: Ian F. Darwin, http://www.darwinsys.com/, based on a detailed
 *          algorithm in Knuth, vol 1, pg 155.
 * 
 * @Version: $Id: Easter.java,v 1.5 2004/02/09 03:33:46 ian Exp $ Written in C,
 *           Toronto, 1988. Java version 1996.
 * 
 * @Note: It's not proven correct, although it gets the right answer for years
 *        around the present.
 */
public class Main {

  /*
   * Compute the day of the year that Easter falls on. Step names E1 E2 etc.,
   * are direct references to Knuth, Vol 1, p 155. @exception
   * IllegalArgumentexception If the year is before 1582 (since the algorithm
   * only works on the Gregorian calendar).
   */
  public static final Calendar findHolyDay(int year) {
    if (year <= 1582) {
      throw new IllegalArgumentException("Algorithm invalid before April 1583");
    }
    int golden, century, x, z, d, epact, n;

    golden = (year % 19) + 1; /* E1: metonic cycle */
    century = (year / 100) + 1; /* E2: e.g. 1984 was in 20th C */
    x = (3 * century / 4) - 12; /* E3: leap year correction */
    z = ((8 * century + 5) / 25) - 5; /* E3: sync with moon's orbit */
    d = (5 * year / 4) - x - 10;
    epact = (11 * golden + 20 + z - x) % 30; /* E5: epact */
    if ((epact == 25 && golden > 11) || epact == 24)
      epact++;
    n = 44 - epact;
    n += 30 * (n < 21 ? 1 : 0); /* E6: */
    n += 7 - ((d + n) % 7);
    if (n > 31) /* E7: */
      return new GregorianCalendar(year, 4 - 1, n - 31); /* April */
    else
      return new GregorianCalendar(year, 3 - 1, n); /* March */
  }

  public static void main(String[] argv) {
    int year = 2013;
    System.out.println(findHolyDay(year).getTime());

  }
}

The code above generates the following result.





















Home »
  Java Tutorial »
    Date »




Date Get
Date Set
Date Format
Date Compare
Date Convert
Date Calculation
Date Parse
Timezone