Commit 61a3744

mo <mo.khan@gmail.com>
2019-07-13 20:39:11
first try at implementing the algorithm
1 parent f495db1
Changed files (1)
src/Q6/WeekDay.java
@@ -24,6 +24,74 @@ public class WeekDay {
   public static final int SATURDAY = 0;
 
   public String getWeekDay(int day, int month, int year) {
-    return "";
+    switch (daysSinceEpoch(day, month, year) % 7) {
+      case 0:
+        return "Sunday";
+      case 1:
+        return "Monday";
+      case 2:
+        return "Tuesday";
+      case 3:
+        return "Wednesday";
+      case 4:
+        return "Thursday";
+      case 5:
+        return "Friday";
+      case 6:
+        return "Saturday";
+      default:
+        return "Unknown";
+    }
+  }
+
+  private int daysSinceEpoch(int day, int month, int year) {
+    int days = (year - 1900) * 365;
+    days += (year - 1900) / 4;
+    if (isLeapYear(year) && (month == 1 || month == 2))
+      days -= 1;
+    days += daysThisYearUpTo(day, month);
+    return days;
+  }
+
+  private boolean isLeapYear(int year) {
+    return year % 4 == 0;
+  }
+
+  private int daysThisYearUpTo(int day, int month) {
+    int x = 0;
+    for (int i = 1; i < month; i++)
+      x += daysInMonth(month);
+    return x + day;
+  }
+
+  private int daysInMonth(int month) {
+    switch (month) {
+      case 1:
+        return 31;
+      case 2:
+        return 28;
+      case 3:
+        return 31;
+      case 4:
+        return 30;
+      case 5:
+        return 31;
+      case 6:
+        return 30;
+      case 7:
+        return 31;
+      case 8:
+        return 31;
+      case 9:
+        return 30;
+      case 10:
+        return 31;
+      case 11:
+        return 30;
+      case 12:
+        return 31;
+      default:
+        return 0;
+    }
   }
 }