Zeller’s Congruence | Find the Day for a Date

Zeller’s congruence is an algorithm devised by Christian Zeller to calculate the day of the week for any Julian or Gregorian calendar date. It can be considered to be based on the conversion between Julian day and the calendar date.
It is an algorithm to find the day of the week for any date.
For the Gregorian calender it is:
h=\left ( q + [ \frac{13(m+1)}{5}  ]+K +\left [ \frac{K}{4}\right ]+\left [ \frac{J}{4}\right ]-2J\right )mod7
For the julian calender it is:
h=\left ( q + \left [ \frac{13(m+1)}{5} \right ]+K +\left [ \frac{K}{4}\right ]+5-J\right )mod7

where,

  1. h is the day of the week (0 = Saturday, 1 = Sunday, 2 = Monday, …, 6 = Friday)
  2. q is the day of the month
  3. m is the month (3 = March, 4 = April, 5 = May, …, 14 = February)
  4. K the year of the century ( year % 100).
  5. J is the zero-based century (actually ⌊ year/100 ⌋ ) For example, the zero-based centuries for 1995 and 2000 are 19 and 20 respectively (to not be confused with the common ordinal century enumeration which indicates 20th for both cases).
NOTE: In this algorithm January and February are
      counted as months 13 and 14 of the previous
      year.E.g. if it is 2 February 2010, the 
      algorithm counts the date as the second day 
      of the fourteenth month of 2009 (02/14/2009 
      in DD/MM/YYYY format)

For an ISO week date Day-of-Week d (1 = Monday to 7 = Sunday), use

 d = ((h+5)%7) + 1 

C++

filter_none

edit
close

play_arrow

link
brightness_4
code

// C++ program to find Find the Day
// for a Date
# include <iostream>
# include <cmath>
# include <cstring>
using namespace std;
  
int Zellercongruence(int day, int month,
                     int year)
{
if (month == 1)
{
    month = 13;
    year--;
}
if (month == 2)
{
    month = 14;
    year--;
}
int q = day;
int m = month;
int k = year % 100;
int j = year / 100;
int h = q + 13*(m+1)/5 + k + k/4 + j/4 + 5*j;
h = h % 7;
switch (h)
{
    case 0 : cout << "Saturday \n"; break;
    case 1 : cout << "Sunday \n"; break;
    case 2 : cout << "Monday \n"; break;
    case 3 : cout << "Tuesday \n"; break;
    case 4 : cout << "Wednesday \n"; break;
    case 5 : cout << "Thursday \n"; break;
    case 6 : cout << "Friday \n"; break;
}
return 0;
}
  
// Driver code
int main()
{
Zellercongruence(22, 10, 2017); //date (dd/mm/yyyy)
return 0;
}

chevron_right


Java

filter_none

edit
close

play_arrow

link
brightness_4
code

// Java program to find Find the Day
// for a Date
import java.util.*;
  
class GFG
{
    // Print Day for a Date
    static void Zellercongruence(int day, int month,
                                 int year)
    {
        if (month == 1)
        {
            month = 13;
            year--;
        }
        if (month == 2)
        {
            month = 14;
            year--;
        }
        int q = day;
        int m = month;
        int k = year % 100;
        int j = year / 100;
        int h = q + 13*(m + 1) / 5 + k + k / 4 + j / 4 + 5 * j;
        h = h % 7;
        switch (h)
        {
            case 0 : System.out.println("Saturday"); break;
            case 1 : System.out.println("Sunday"); break
            case 2 : System.out.println("Monday"); break;
            case 3 : System.out.println("Tuesday"); break;
            case 4 : System.out.println("Wednesday"); break;
            case 5 : System.out.println("Thursday"); break;
            case 6 : System.out.println("Friday"); break;
        }
    }
      
    // Driver code
    public static void main(String[] args)
    {
        Zellercongruence(22, 10, 2017); //date (dd/mm/yyyy)
    }
}
  
/* This code is contributed by Mr. Somesh Awasthi */

chevron_right


Python3

filter_none

edit
close

play_arrow

link
brightness_4
code

# Python3 program to find Find the Day
# for a Date
  
def switch(h) :
    return {
        0 : "Saturday",
        1 : "Sunday",
        2 : "Monday",
        3 : "Tuesday",
        4 : "Wednesday",
        5 : "Thursday",
        6 : "Friday",
    }[h]
  
def Zellercongruence(day, month, year) :
    if (month == 1) :
        month = 13
        year = year - 1
  
    if (month == 2) :
        month = 14
        year = year - 1
    q = day
    m = month
    k = year % 100;
    j = year // 100;
    h = q + 13 * (m + 1) // 5 + k + k // 4 + j // 4 + 5 * j
    h = h % 7
    print(switch (h))
      
      
      
# Driver code
Zellercongruence(22, 10, 2017) #date (dd/mm/yyyy)
  
# This code is contributed by Nikita Tiwari

chevron_right


C#

filter_none

edit
close

play_arrow

link
brightness_4
code

// C# program to find Find the Day
// for a Date
using System;
  
class GFG {
      
    // Print Day for a Date
    static void Zellercongruence(int day, 
                      int month, int year)
    {
        if (month == 1)
        {
            month = 13;
            year--;
        }
        if (month == 2)
        {
            month = 14;
            year--;
        }
        int q = day;
        int m = month;
        int k = year % 100;
        int j = year / 100;
        int h = q + 13 * (m + 1) / 5 + k + k / 4 
                                 + j / 4 + 5 * j;
        h = h % 7;
        switch (h)
        {
            case 0 : Console.WriteLine("Saturday");
                     break;
                       
            case 1 : Console.WriteLine("Sunday"); 
                     break
                       
            case 2 : Console.WriteLine("Monday"); 
                     break;
                       
            case 3 : Console.WriteLine("Tuesday"); 
                     break;
                       
            case 4 : Console.WriteLine("Wednesday"); 
                     break;
                       
            case 5 : Console.WriteLine("Thursday");
                     break;
                       
            case 6 : Console.WriteLine("Friday"); 
                     break;
        }
    }
      
    // Driver code
    public static void Main()
    {
          
        //date (dd/mm/yyyy)
        Zellercongruence(22, 10, 2017); 
    }
}
  
/* This code is contributed by vt_m */

chevron_right


PHP

filter_none

edit
close

play_arrow

link
brightness_4
code

<?php
// PHP program to find Find the Day
// for a Date
  
function Zellercongruence($day, $month, $year)
{
    if ($month == 1)
    {
        $month = 13;
        $year--;
    }
      
    if ($month == 2)
    {
        $month = 14;
        $year--;
    }
      
        $q = $day;
        $m = $month;
        $k = $year % 100;
        $j = $year / 100;
        $h = $q + 13*($m + 1) / 5 + $k
               $k / 4 + $j / 4 + 5 * $j;
        $h = $h % 7;
    switch ($h)
    {
        case 1 : echo "Saturday \n"
        break;
        case 2 : echo "Sunday \n"
        break;
        case 3 : echo "Monday \n"
        break;
        case 4 : echo "Tuesday \n"
        break;
        case 5 : echo "Wednesday \n";
        break;
        case 6 : echo "Thursday \n"
        break;
        case 7 : echo "Friday \n"
        break;
    }
}
  
// Driver code
//date (dd/mm/yyyy)
Zellercongruence(22, 10, 2017); 
  
// This code is contributed by ajit.
?>

chevron_right



Output:

Sunday

Reference:

  1. Zellers Congruence
  2. Wiki – Zeller’s Congruence
  3. ISO -Time | Info

This article is contributed by Amartya Ranjan Saikia. If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above.



My Personal Notes arrow_drop_up

Improved By : jit_t



Article Tags :
Practice Tags :


1


Please write to us at contribute@geeksforgeeks.org to report any issue with the above content.