function:RenderSidePart pageleftbodycaption pageleftbody sidenote Main.DayOfWeek-SideNote Main.SideNote Site.SideNote

# Day Of Week

The Algorithms we are using are explained at Wikipeadia

# Method 1: Gauss's Algorithm ( Static class method - "Chapter 4 Style")

Here is Gauss' method:

{⚠ $w = (d + \lfloor \frac{13 \cdot m-1}{5} \rfloor + y + \left\lfloor\frac{y}{4}\right\rfloor + \left\lfloor\frac{c}{4}\right\rfloor - 2c) \bmod 7$}

Where
Y: year-1 for  January or February,
year   for  the rest of the year
d: day (1 to 31)
m: shifted month (March=1,...February=12), eg. ((month + 9) % 12) + 1
y: last 2 digits of Y
c: first 2 digits of Y
w: day of week (0=Sunday,..6=Saturday)


The math notation for the floor function is the partial bracket. For example, {⚠ $\lfloor 5.9 \rfloor = 5$}. It is very handy that in Java, integer division has a "built-in" floor function.

For those who are just at chapter 4, you haven't seen arrays or "if" statements yet. I have some starter code for the Gaussian method below, so all you have to do is translate the math algorithm into java code:

public class DayOfWeekTester
{
public static String dow(int month, int day, int year)
{
String[] weekdays={"Sunday", "Monday", "Tuesday",
"Wednesday", "Thursday", "Friday", "Saturday"};
int Y=year;
if (month<3)
Y--;
int d=
int m=
int y=
int c=
int w=
return weekdays[w];
}
public static void main(String[] args)
{
System.out.println("4/24/1982 falls on "+dow(4,24,1982));
System.out.println("Expected Saturday");
System.out.println("12/25/1960 falls on "+dow(12,25,1960));
System.out.println("Expected Sunday");
}

}


# Method 2: Look up Algorithm ( Object method with arrays)

## DayOfWeekTester2.java

public class DayOfWeekTester2
{

public static void main(String[] args)
{
Date d1=new Date(4,24,1982);
System.out.println(d1+" falls on "+d1.dow());
System.out.println("Expected Saturday");
Date d2=new Date(12,25,1960);
System.out.println(d2+" falls on "+d2.dow());
System.out.println("Expected Sunday");
}

}


## Date.java

public class Date
{
private int month;
private int day;
private int year;
public static String[] weekdays={"Sunday", "Monday", "Tuesday",
"Wednesday", "Thursday", "Friday", "Saturday"};
public static int[] centuryTable={4,2,0,6,4,2,0,6,4,2};
public static int[] monthTable={0,0,3,3,6,1,4,6,2,5,0,3,5};

public Date(int m, int d, int y)
{
month=m;
day=d;
year=y;
}

public String toString(){
return month+"/"+day+"/"+year;
}
public int getCenturyTable()
{
int c=year/100;
return centuryTable[c-17];
}
public int getLast2DigitsOfYear()
{
return year%100;
}
public int leapYearCount()
{
return (getLast2DigitsOfYear()/4);
}
public boolean isLeapYear()
{
if (year%400==0)
return year%4==0;
}
public int getMonthTable()
{
if (isLeapYear() && month==1)
return 6;
if (isLeapYear() && month==2)
return 2;
return monthTable[month];
}
public String dow()
{
int sum=getCenturyTable()+getLast2DigitsOfYear()+leapYearCount()+getMonthTable()+day;
return weekdays[sum%7];
}
}