@@ -0,0 +1,2188 @@
+package seedu.gtd.model.task;%0A%0Aimport seedu.gtd.commons.exceptions.IllegalValueException;%0A%0A/**%0A * Represents a Task's start date in the address book.%0A * Guarantees: immutable; is valid as declared in %7B@link #isValidDueDate(String)%7D%0A */%0Apublic class StartDate %7B%0A%0A    public static final String MESSAGE_STARTDATE_CONSTRAINTS = %22Task duedate is formatted like the following: Wed Nov 02 15:39:55 UTC 2016 %5Cn%22 %0A            + %22 Accepted formal dates: 1978-01-28, 1984/04/02, 1/02/1980, 2/28/79 %5Cn%22%0A            + %22 Relaxed dates: The 31st of April in the year 2008, Fri, 21 Nov 1997, Jan 21, '97, Sun, Nov 21, jan 1st, february twenty-eighth %5Cn%22%0A            + %22 Relative dates: next thursday, last wednesday, today, tomorrow, yesterday, next week, next month, next year, 3 days from now, three weeks ago %5Cn%22%0A            + %22 Prefixes: day after, the day before, the monday after, the monday before, 2 fridays before, 4 tuesdays after %5Cn%22%0A            + %22 Time: 0600h, 06:00 hours, 6pm, 5:30 a.m., 5, 12:59, 23:59, 8p, noon, afternoon, midnight %5Cn%22 %0A            + %22 Relative times: 10 seconds ago, in 5 minutes, 4 minutes from now.%22;%0A%0A    public final String value;%0A%0A    /**%0A     * Validates given start date.%0A     *%0A     * @throws IllegalValueException if given start date string is invalid.%0A     */%0A    public StartDate(String startdate) throws IllegalValueException %7B%0A        assert startdate != null;%0A        if (isInvalidStartDate(startdate)) %7B%0A            throw new IllegalValueException(MESSAGE_STARTDATE_CONSTRAINTS);%0A        %7D%0A        this.value = startdate;%0A    %7D%0A%0A    /**%0A     * Returns true if a given string is a valid task due date number.%0A     */%0A    public static boolean isInvalidStartDate(String test) %7B%0A        return test.isEmpty();%0A    %7D%0A%0A    @Override%0A    public String toString() %7B%0A        return value;%0A    %7D%0A%0A    @Override%0A    public boolean equals(Object other) %7B%0A        return other == this // short circuit if same object%0A                %7C%7C (other instanceof StartDate // instanceof handles nulls%0A                && this.value.equals(((StartDate) other).value)); // state check%0A    %7D%0A%0A    @Override%0A    public int hashCode() %7B%0A        return value.hashCode();%0A    %7D%0A%0A%7D%0A

Implement StartDate