title: How to get the date from user input in Java?
body: <p>I need to print a calendar from the input date given by the user. HOWEVER, I AM NOT ALLOWED TO USE ANY PREDEFINED DATE CLASS. </p>
  
  <p>Currently, I am able to print the month and the year, however, I can't seem to figure out how to print day in which that date falls on in the particular month + year. I am very new to Java so any help would be greatly appreciated! </p>
  
  <p>Here is an example of the desired output: </p>
  
  <pre><code>24/05/2020 is a Sunday and locates in the fourth week of May 2020
  
  The calendar of May 2020 is:
  
  MON TUE WED THU FRI SAT SUN 
                  1   2   3
  4   5   6   7   8   9   10
  11  12  13  14  15  16  17
  18  19  20  21  22  23  24
  25  26  27  28  29  30  31
  </code></pre>
  
  <p>Here is my output so far: </p>
  
  <pre><code>22/5/2020 is a null and located in May
  
  Here is the calendar for May: 
  
           May 2020
  -----------------------------
   Sun Mon Tue Wed Thu Fri Sat
                         1   2
     3   4   5   6   7   8   9
    10  11  12  13  14  15  16
    17  18  19  20  21  22  23
    24  25  26  27  28  29  30
    31
  </code></pre>
  
  <p>Here is what I have tried so far: </p>
  
  <pre><code>import java.util.Scanner;
  
  public class PrintCalendar {
  
  /** Main method */
  
  public static void main(String[] args) {
  
  // Prompt the user to enter year
  Scanner scanner = new Scanner(System.in);
  
  
  
  // Prompt the user to enter year
  System.out.print("Enter year (e.g.1999): ");
  
  int year = scanner.nextInt();
  
  
  
  // Prompt the user to enter month
  System.out.print("Enter month (1-12): ");
  
  int month = scanner.nextInt();
  
  System.out.println("Enter the day (1-7): ");
  
  int theDay = scanner.nextInt();
  
  
  
  // Print calendar for the month of the year
  printMonth(year, month, theDay);
  
  }
  
  
  
  /** Print the calendar for a month in a year */
  
  static void printMonth(int year, int month, int day) {
  
  // Print the headings of the calendar
  printMonthTitle(year, month, day);
  
  
  
  // Print the body of the calendar
  printMonthBody(year, month);
  
  }
  
  
  
  /** Print the month title, e.g., May, 1999 */
  
  static void printMonthTitle(int year, int month, int day) {
  
  System.out.println(day + "/"+  month + "/" + year + " is a " + getDayOfWeek(day) + " and located in " + getMonthName(month));
  
  System.out.println();
  
  System.out.println("Here is the calendar for " + getMonthName(month) + ": ");
  
  System.out.println();
  
  
  System.out.println("         " + getMonthName(month)
  
    + " " + year);
  
  System.out.println("-----------------------------");
  
  System.out.println(" Sun Mon Tue Wed Thu Fri Sat");
  
  }
  
  
  
  /** Get the English name for the month */
  
  static String getMonthName(int month) {
  
  String monthName = null;
  
  switch (month) {
  
    case 1: monthName = "January"; break;
  
    case 2: monthName = "February"; break;
  
    case 3: monthName = "March"; break;
  
    case 4: monthName = "April"; break;
  
    case 5: monthName = "May"; break;
  
    case 6: monthName = "June"; break;
  
    case 7: monthName = "July"; break;
  
    case 8: monthName = "August"; break;
  
    case 9: monthName = "September"; break;
  
    case 10: monthName = "October"; break;
  
    case 11: monthName = "November"; break;
  
    case 12: monthName = "December";
  
  }
  
  
  
  return monthName;
  
  }
  
  
  
  public static String getDayOfWeek(int day) {
  
    String dayName = null;
  
    switch (day) {
  
    case 1: dayName = "Sunday"; break;
  
    case 2: dayName = "Monday"; break;
  
    case 3: dayName = "Tuesday"; break;
  
    case 4: dayName = "Wednesday"; break;
  
    case 5: dayName = "Thursday"; break;
  
    case 6: dayName = "Friday"; break;
  
    case 7: dayName = "Saturday"; 
  
    }
  
    return dayName;
  
  }
  
  
  /** Print month body */
  
  static void printMonthBody(int year, int month) {
  
  // Get start day of the week for the first date in the month
  int startDay = getStartDay(year, month);
  
  
  
  // Get number of days in the month
  int numberOfDaysInMonth = getNumberOfDaysInMonth(year, month);
  
  
  
  // Pad space before the first day of the month
  int i = 0;
  
  for (i = 0; i &lt; startDay; i++)
  
    System.out.print("    ");
  
  
  
  for (i = 1; i &lt;= numberOfDaysInMonth; i++) {
  
    if (i &lt; 10)
  
      System.out.print("   " + i);
  
    else
  
      System.out.print("  " + i);
  
  
  
    if ((i + startDay) % 7 == 0)
  
      System.out.println();
  
  }
  
  
  
  System.out.println();
  
  }
  
  
  
  /** Get the start day of the first day in a month */
  
  static int getStartDay(int year, int month) {
  
  // Get total number of days since 1/1/1800
  int startDay1800 = 3;
  
  int totalNumberOfDays = getTotalNumberOfDays(year, month);
  
  
  
  // Return the start day
  return (totalNumberOfDays + startDay1800) % 7;
  
  }
  
  
  
  /** Get the total number of days since January 1, 1800 */
  
  static int getTotalNumberOfDays(int year, int month) {
  
  int total = 0;
  
  
  
  // Get the total days from 1800 to year - 1
  for (int i = 1800; i &lt; year; i++)
  
  if (isLeapYear(i))
  
    total = total + 366;
  
  else
  
    total = total + 365;
  
  
  
  // Add days from Jan to the month prior to the calendar month
  for (int i = 1; i &lt; month; i++)
  
    total = total + getNumberOfDaysInMonth(year, i);
  
  
  
  return total;
  
  }
  
  
  
  /** Get the number of days in a month */
  
  static int getNumberOfDaysInMonth(int year, int month) {
  
  if (month == 1 || month == 3 || month == 5 || month == 7 ||
  
    month == 8 || month == 10 || month == 12)
  
    return 31;
  
  
  
  if (month == 4 || month == 6 || month == 9 || month == 11)
  
    return 30;
  
  
  
  if (month == 2) return isLeapYear(year) ? 29 : 28;
  
  
  
  return 0; // If month is incorrect
  }
  
  
  
  /** Determine if it is a leap year */
  
  static boolean isLeapYear(int year) {
  
  return year % 400 == 0 || (year % 4 == 0 &amp;&amp; year % 100 != 0);
  
    }
  
  }
  </code></pre>