Algorithm:
1)Take the last two digits of the year.
2)Divide by 4, discarding any fraction.
3)Add the day of the month.
4)Add the month's key value: JFM AMJ JAS OND 144 025 036 146
5)Subtract 1 for January or February of a leap year.
6)For a Gregorian date, add 0 for 1900's, 6 for 2000's, 4 for 1700's, 2 for 1800's; for other years, add or subtract multiples of 400.
7)For a Julian date, add 1 for 1700's, and 1 for every additional century you go back.
8)Add the last two digits of the year.
9)Divide by 7 and take the remainder.
Example:
Let's take a date: 26/03/2027
Last two digit of the year = 27
Divide by 4 discard fraction = 27/4 = 6.75 = 6
Add day = 6 + 26 = 32
Month key = 4 + 32 = 36
Add year code = 36 + 6 = 42
Now add two digits of the first year = 42 + 27 = 69
Now get the remainder after dividing by 7 = 69%7=6
So 1 is Sunday
so 6 is Friday
So 27/03/2027
Program:
import java.util.Scanner;
public class daydate {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("Enter the year: ");
int year = sc.nextInt();
System.out.print("Enter the month (1-12): ");
int month = sc.nextInt();
System.out.print("Enter the day of the month: ");
int day = sc.nextInt();
int lastTwoDigitsOfYear = year % 100;
int step1 = lastTwoDigitsOfYear / 4;
int step2 = step1 + day;
int monthKeyValue = 0;
switch (month) {
case 1: // January
monthKeyValue = 1;
break;
case 2: // February
monthKeyValue = 4;
break;
case 3: // March
monthKeyValue = 4;
break;
case 4: // April
monthKeyValue = 0;
break;
case 5: // May
monthKeyValue = 2;
break;
case 6: // June
monthKeyValue = 5;
break;
case 7: // July
monthKeyValue = 0;
break;
case 8: // August
monthKeyValue = 3;
break;
case 9: // September
monthKeyValue = 6;
break;
case 10: // October
monthKeyValue = 1;
break;
case 11: // November
monthKeyValue = 4;
break;
case 12: // December
monthKeyValue = 6;
break;
}
int step3 = step2 + monthKeyValue;
// Leap year adjustment
if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) { // Check for leap year
if (month == 1 || month == 2) {
step3--;
}
}
// Gregorian Calendar Year Adjustment
int yearAdjustment = 0;
if (year >= 1700 && year < 1800) {
yearAdjustment = 4;
} else if (year >= 1800 && year < 1900) {
yearAdjustment = 2;
} else if (year >= 1900 && year < 2000) {
yearAdjustment = 0;
} else if (year >= 2000 && year < 2100) {
yearAdjustment = 6;
} else {
int century = year / 100;
yearAdjustment = (6 - 2 * (century % 4)) % 7;
if (yearAdjustment < 0) yearAdjustment += 7; // Ensure positive value
}
step3 += yearAdjustment;
int step4 = step3 + lastTwoDigitsOfYear;
int dayOfWeek = step4 % 7;
String[] dayNames = {"Saturday", "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday"}; //0 is Saturday as per the algorithm
System.out.println("The day of the week is: " + dayNames[dayOfWeek]);
sc.close();
}
}