import java.io.*; class Date { private int day; // day of month private int month; // month (1..12) private int year; // year (4 digits) // constructors public Date () { day = 1; month = 1; year = 1; } public Date (int day, int month, int year) { this.day = day; this.month = month; this. year = year; } // compares this date to date and returns true if they're equal public boolean equals (Date date) { if (day == date.day && month == date.month && year == date.year) return true; else return false; } // compares this date to date and returns true if this date is less // (occurs before) date public boolean lessThan (Date date) { if (year < date.year) return true; else if (year == date.year) { if (month < date.month) return true; else if (month == date.month) if (day < date.day) return true; } return false; } // formats a date into a "month day, year" format (e.g. March 2, 2000 public String format () { return monthStr () + " " + day + ", " + year; } // returns true if year is a leap year private boolean leapYear () { boolean result = false; if (year % 400 == 0) result = true; else if (year % 100 == 0) result = false; else if (year % 4 == 0) result = true; else result = false; return result; } // increments the current date by one day public void nextDay () { boolean isLeap; day += 1; isLeap = leapYear (); // month rollover if (day > monthLength (month, isLeap)) { day = 1; month += 1; } // year rollover if (month > 12) { month = 1; year +=1; } } // returns the number of days in month private int monthLength (int month, boolean leap) { int result; if (month == 9 || month == 4 || month == 6 || month == 11) { result = 30; } else if (month == 2) { if (leap) result = 29; else result = 28; } else result = 31; return result; } // returns string name corresponding to month number private String monthStr () { switch (month) { case (1) : return "January"; case (2) : return "February"; case (3) : return "March"; case (4) : return "April"; case (5) : return "May"; case (6) : return "June"; case (7) : return "July"; case (8) : return "August"; case (9) : return "September"; case (10) : return "October"; case (11) : return "November"; case (12) : return "December"; } return "unknown"; } }