CSCI 160 Problem 3 supporting code

public class Date {
    private static int[] days_of_month
        = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
    private static String[] month_name
        = { "Jan", "Feb", "Mar", "Apr", "May", "Jun",
            "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" };

    private int year;
    private int month;
    private int day;

    public Date(int year, int month, int day) {
        if(month < 0 || month >= days_of_month.length) {
            throw new IllegalArgumentException("Invalid month number "
                + month);
        }

        this.year = year;
        this.month = month;
        this.day = day;

        if(daysLeftInMonth() < 0) {
            throw new IllegalArgumentException("Invalid day number "
                + day + " in " + month_name[month]);
        }
    }

    public boolean equals(Date other) {
        return this.year == other.year && this.month == other.month
            && this.day == other.day;
    }

    public void increment(int days) {
        while(days >= daysLeftInMonth()) {
            days -= daysLeftInMonth();
            month++;
            if(month == days_of_month.length) {
                year++;
                month = 0;
            }
            day = 1;
        }

        day += days;
    }

    public String toString() {
        return day + " " + month_name[month] + " " + year;
    }

    private int daysLeftInMonth() {
        if(isLeapYear() && month == 1) {
            return days_of_month[month] - day + 2;
        } else {
            return days_of_month[month] - day + 1;
        }
    }

    private boolean isLeapYear() {
        if(year % 400 == 0) return true;
        if(year % 100 != 0) return false;
        if(year % 4 == 0) return true;
        return false;
    }
}