Class SpreadsheetDate

  • All Implemented Interfaces:
    java.io.Serializable, java.lang.Comparable, MonthConstants

    public class SpreadsheetDate
    extends SerialDate
    Represents a date using an integer, in a similar fashion to the implementation in Microsoft Excel. The range of dates supported is 1-Jan-1900 to 31-Dec-9999.

    Be aware that there is a deliberate bug in Excel that recognises the year 1900 as a leap year when in fact it is not a leap year. You can find more information on the Microsoft website in article Q181370:

    http://support.microsoft.com/support/kb/articles/Q181/3/70.asp

    Excel uses the convention that 1-Jan-1900 = 1. This class uses the convention 1-Jan-1900 = 2. The result is that the day number in this class will be different to the Excel figure for January and February 1900...but then Excel adds in an extra day (29-Feb-1900 which does not actually exist!) and from that point forward the day numbers will match.

    See Also:
    Serialized Form
    • Field Detail

      • serialVersionUID

        private static final long serialVersionUID
        For serialization.
        See Also:
        Constant Field Values
      • serial

        private final int serial
        The day number (1-Jan-1900 = 2, 2-Jan-1900 = 3, ..., 31-Dec-9999 = 2958465).
      • day

        private final int day
        The day of the month (1 to 28, 29, 30 or 31 depending on the month).
      • month

        private final int month
        The month of the year (1 to 12).
      • year

        private final int year
        The year (1900 to 9999).
    • Constructor Detail

      • SpreadsheetDate

        public SpreadsheetDate​(int day,
                               int month,
                               int year)
        Creates a new date instance.
        Parameters:
        day - the day (in the range 1 to 28/29/30/31).
        month - the month (in the range 1 to 12).
        year - the year (in the range 1900 to 9999).
      • SpreadsheetDate

        public SpreadsheetDate​(int serial)
        Standard constructor - creates a new date object representing the specified day number (which should be in the range 2 to 2958465.
        Parameters:
        serial - the serial number for the day (range: 2 to 2958465).
    • Method Detail

      • toSerial

        public int toSerial()
        Returns the serial number for the date, where 1 January 1900 = 2 (this corresponds, almost, to the numbering system used in Microsoft Excel for Windows and Lotus 1-2-3).
        Specified by:
        toSerial in class SerialDate
        Returns:
        The serial number of this date.
      • toDate

        public java.util.Date toDate()
        Returns a java.util.Date equivalent to this date.
        Specified by:
        toDate in class SerialDate
        Returns:
        The date.
      • getYYYY

        public int getYYYY()
        Returns the year (assume a valid range of 1900 to 9999).
        Specified by:
        getYYYY in class SerialDate
        Returns:
        The year.
      • getMonth

        public int getMonth()
        Returns the month (January = 1, February = 2, March = 3).
        Specified by:
        getMonth in class SerialDate
        Returns:
        The month of the year.
      • getDayOfMonth

        public int getDayOfMonth()
        Returns the day of the month.
        Specified by:
        getDayOfMonth in class SerialDate
        Returns:
        The day of the month.
      • getDayOfWeek

        public int getDayOfWeek()
        Returns a code representing the day of the week.

        The codes are defined in the SerialDate class as: SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, and SATURDAY.

        Specified by:
        getDayOfWeek in class SerialDate
        Returns:
        A code representing the day of the week.
      • equals

        public boolean equals​(java.lang.Object object)
        Tests the equality of this date with an arbitrary object.

        This method will return true ONLY if the object is an instance of the SerialDate base class, and it represents the same day as this SpreadsheetDate.

        Overrides:
        equals in class java.lang.Object
        Parameters:
        object - the object to compare (null permitted).
        Returns:
        A boolean.
      • hashCode

        public int hashCode()
        Returns a hash code for this object instance.
        Overrides:
        hashCode in class java.lang.Object
        Returns:
        A hash code.
      • compare

        public int compare​(SerialDate other)
        Returns the difference (in days) between this date and the specified 'other' date.
        Specified by:
        compare in class SerialDate
        Parameters:
        other - the date being compared to.
        Returns:
        The difference (in days) between this date and the specified 'other' date.
      • compareTo

        public int compareTo​(java.lang.Object other)
        Implements the method required by the Comparable interface.
        Parameters:
        other - the other object (usually another SerialDate).
        Returns:
        A negative integer, zero, or a positive integer as this object is less than, equal to, or greater than the specified object.
      • isOn

        public boolean isOn​(SerialDate other)
        Returns true if this SerialDate represents the same date as the specified SerialDate.
        Specified by:
        isOn in class SerialDate
        Parameters:
        other - the date being compared to.
        Returns:
        true if this SerialDate represents the same date as the specified SerialDate.
      • isBefore

        public boolean isBefore​(SerialDate other)
        Returns true if this SerialDate represents an earlier date compared to the specified SerialDate.
        Specified by:
        isBefore in class SerialDate
        Parameters:
        other - the date being compared to.
        Returns:
        true if this SerialDate represents an earlier date compared to the specified SerialDate.
      • isOnOrBefore

        public boolean isOnOrBefore​(SerialDate other)
        Returns true if this SerialDate represents the same date as the specified SerialDate.
        Specified by:
        isOnOrBefore in class SerialDate
        Parameters:
        other - the date being compared to.
        Returns:
        true if this SerialDate represents the same date as the specified SerialDate.
      • isAfter

        public boolean isAfter​(SerialDate other)
        Returns true if this SerialDate represents the same date as the specified SerialDate.
        Specified by:
        isAfter in class SerialDate
        Parameters:
        other - the date being compared to.
        Returns:
        true if this SerialDate represents the same date as the specified SerialDate.
      • isOnOrAfter

        public boolean isOnOrAfter​(SerialDate other)
        Returns true if this SerialDate represents the same date as the specified SerialDate.
        Specified by:
        isOnOrAfter in class SerialDate
        Parameters:
        other - the date being compared to.
        Returns:
        true if this SerialDate represents the same date as the specified SerialDate.
      • isInRange

        public boolean isInRange​(SerialDate d1,
                                 SerialDate d2)
        Returns true if this SerialDate is within the specified range (INCLUSIVE). The date order of d1 and d2 is not important.
        Specified by:
        isInRange in class SerialDate
        Parameters:
        d1 - a boundary date for the range.
        d2 - the other boundary date for the range.
        Returns:
        A boolean.
      • isInRange

        public boolean isInRange​(SerialDate d1,
                                 SerialDate d2,
                                 int include)
        Returns true if this SerialDate is within the specified range (caller specifies whether or not the end-points are included). The order of d1 and d2 is not important.
        Specified by:
        isInRange in class SerialDate
        Parameters:
        d1 - one boundary date for the range.
        d2 - a second boundary date for the range.
        include - a code that controls whether or not the start and end dates are included in the range.
        Returns:
        true if this SerialDate is within the specified range.
      • calcSerial

        private int calcSerial​(int d,
                               int m,
                               int y)
        Calculate the serial number from the day, month and year.

        1-Jan-1900 = 2.

        Parameters:
        d - the day.
        m - the month.
        y - the year.
        Returns:
        the serial number from the day, month and year.