Ask Question

Name:
Title:
Your Question:

Answer Question

Name:
Your Answer:
User Submitted Source Code!


Description:
  Date
Language: JAVA
Code:

/**
 * @author Tyler McClure
 * email: [email protected]
 * ITP 109x - Trina Gregory
 * Final Project
 * Sets and returns the Birthday; throws errors if date is incorrect
 */

import java.util.Calendar;
import java.util.GregorianCalendar;
import java.text.DateFormatSymbols;

public class Date {
     
     // declare variables
     private int year, month, day;
     private boolean error;
     private String message;
     
     // default constructor
     public Date () {
          year = 0;
          month = 0;
          day = 0;
          error = false;
          message = "";
     }
     
     // constructor that passes in ints for year, month, day
     public Date (int y, int m, int d) {
          this ();
          setDate (y, m, d);
     }
     
     // constructor that passes in Strings for year, month, day
     public Date (String y, String m, String d) {
          this ();
          setDate (y, m, d);
     }
     
     // declare leapYear method
     private boolean leapYear() {
          if (year%400 == 0 || (year%4 == 0 && year%100 != 0)) {
               return true;
          } else {
               return false;
          }
     }
     
     // declare setError method
     private void setError () {
          // year must be between 1582 and 2012
          if (year<1582 || year>2012) {
               error = true;
               message = "Year must be between 1582 and 2012.";
          }
          // month must be between 1 and 12
          else if (month<1 || month>12) {
               error = true;
               message = "Month must be between 1 and 12.";
          } 
          // day must be between 1 and 31
          else if (day<1 || day >31) {
               error = true;
               message = "Day must be between 1 and 31.";
          } 
          // April, June, September and November have 30 days
          else if ( (month==4 || month==6 || month==9 || month==11) && day>30 ) {
               error = true;
               message = "There are 30 days in April, June, September and November.";
          } 
          // February has 29 days on a leap year
          else if (month==2 && leapYear() && day>29) {
               error = true;
               message = "There are 29 days in February when it is a leap year.";
          }
          // February has 28 days when it's not a leap year
          else if (month==2 && !leapYear() && day>28) {
               error = true;
               message = "There are 28 days in February when it is not a leap year.";
          } 
          else {
               error = false;
          }
     }
     
     // getError method
     public boolean getError () {
          return error;
     }
     
     // getMessage method
     public String getMessage () {
          return message;
     }
     
     // setDate method for int inputs
     public void setDate (int yyyy, int mm, int dd) {
          year = yyyy;
          month = mm;
          day = dd;
          setError();
     }
     
     // setDate method for String inputs
     public void setDate (String yr, String mo, String dy) {
          // set error if String is empty
          if (yr.equals(null) || mo.equals(null) || dy.equals(null)) {
               error = true;
               message = "The string you entered was empty.";
          }
          else {
               // convert Strings to ints
               try {
                    int y = Integer.parseInt(yr);
                    int m = Integer.parseInt(mo);
                    int d = Integer.parseInt(dy);

                    // set date with parsed ints
                    setDate (y, m, d);
               }
               
               // catch exception if String inputs are not valid ints
               catch (NumberFormatException e) {
                    error = true;
                    message = "The string you entered did not contain a parsable int.";
               }
               
          }
     }
     
     // getDate method
     public String getDate () {
          // create Array to hold month names and hardcode data
          String[] months = new String[12];
          months[0] = "January";
          months[1] = "February";
          months[2] = "March";
          months[3] = "April";
          months[4] = "May";
          months[5] = "June";
          months[6] = "July";
          months[7] = "August";
          months[8] = "September";
          months[9] = "October";
          months[10] = "November";
          months[11] = "December";
          
          // return date in String format
          return months[(month-1)] + " " + day + ", " + year;
     }
     
     // findDay method
     /* This method finds the day you were born by using Java's Calendar.
      * It returns a String containing the day of the week.
      * Make sure to import java.util.Calendar, java.util.GregorianCalendar,
      * and java.text.DateFormatSymbols.
      */
     public String findDay() {
          // For GregorianCalendar, month is 0-based, e.g., 0 for January
          GregorianCalendar bday = new GregorianCalendar(year, month-1, day);
          // Get day names
          String[] weekdays = new DateFormatSymbols().getWeekdays();
          int dayofweek = bday.get(Calendar.DAY_OF_WEEK);
          return weekdays[dayofweek];
     }
     
     // findAge method
     // This method finds the age by comparing the birth and current date.
     public int findAge () {
          // For GregorianCalendar, month is 0-based, e.g., 0 for January
          GregorianCalendar bday = new GregorianCalendar(year, month-1, day);
          GregorianCalendar today = new GregorianCalendar(); // Today's date
          GregorianCalendar birthday = new GregorianCalendar (today.get(Calendar.YEAR), bday.get(Calendar.MONTH), bday.get(Calendar.DATE));
          int age = today.get(Calendar.YEAR) - bday.get(Calendar.YEAR);
          if (birthday.after(today)) {
               age--;
          }
          return age;
     }

}
Comments: