Class Week

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

    public class Week
    extends RegularTimePeriod
    implements java.io.Serializable
    A calendar week. All years are considered to have 53 weeks, numbered from 1 to 53, although in many cases the 53rd week is empty. Most of the time, the 1st week of the year *begins* in the previous calendar year, but it always finishes in the current year (this behaviour matches the workings of the GregorianCalendar class).

    This class is immutable, which is a requirement for all RegularTimePeriod subclasses.

    See Also:
    Serialized Form
    • Constructor Summary

      Constructors 
      Constructor Description
      Week()
      Creates a new time period for the week in which the current system date/time falls.
      Week​(int week, int year)
      Creates a time period representing the week in the specified year.
      Week​(int week, Year year)
      Creates a time period representing the week in the specified year.
      Week​(java.util.Date time)
      Creates a time period for the week in which the specified date/time falls.
      Week​(java.util.Date time, java.util.Calendar calendar)
      Constructs a new instance, based on a particular date/time.
      Week​(java.util.Date time, java.util.TimeZone zone, java.util.Locale locale)
      Creates a time period for the week in which the specified date/time falls, calculated relative to the specified time zone.
    • Field Detail

      • serialVersionUID

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

        public static final int FIRST_WEEK_IN_YEAR
        Constant for the first week in the year.
        See Also:
        Constant Field Values
      • LAST_WEEK_IN_YEAR

        public static final int LAST_WEEK_IN_YEAR
        Constant for the last week in the year.
        See Also:
        Constant Field Values
      • year

        private short year
        The year in which the week falls.
      • week

        private byte week
        The week (1-53).
      • firstMillisecond

        private long firstMillisecond
        The first millisecond.
      • lastMillisecond

        private long lastMillisecond
        The last millisecond.
    • Constructor Detail

      • Week

        public Week()
        Creates a new time period for the week in which the current system date/time falls. The time zone and locale are determined by the calendar returned by RegularTimePeriod.getCalendarInstance().
      • Week

        public Week​(int week,
                    int year)
        Creates a time period representing the week in the specified year. The time zone and locale are determined by the calendar returned by RegularTimePeriod.getCalendarInstance().
        Parameters:
        week - the week (1 to 53).
        year - the year (1900 to 9999).
      • Week

        public Week​(int week,
                    Year year)
        Creates a time period representing the week in the specified year. The time zone and locale are determined by the calendar returned by RegularTimePeriod.getCalendarInstance().
        Parameters:
        week - the week (1 to 53).
        year - the year (1900 to 9999).
      • Week

        public Week​(java.util.Date time)
        Creates a time period for the week in which the specified date/time falls. The time zone and locale are determined by the calendar returned by RegularTimePeriod.getCalendarInstance(). The locale can affect the day-of-the-week that marks the beginning of the week, as well as the minimal number of days in the first week of the year.
        Parameters:
        time - the time (null not permitted).
        See Also:
        Week(Date, TimeZone, Locale)
      • Week

        public Week​(java.util.Date time,
                    java.util.TimeZone zone,
                    java.util.Locale locale)
        Creates a time period for the week in which the specified date/time falls, calculated relative to the specified time zone.
        Parameters:
        time - the date/time (null not permitted).
        zone - the time zone (null not permitted).
        locale - the locale (null not permitted).
      • Week

        public Week​(java.util.Date time,
                    java.util.Calendar calendar)
        Constructs a new instance, based on a particular date/time. The time zone and locale are determined by the calendar parameter.
        Parameters:
        time - the date/time (null not permitted).
        calendar - the calendar to use for calculations (null not permitted).
    • Method Detail

      • getYear

        public Year getYear()
        Returns the year in which the week falls.
        Returns:
        The year (never null).
      • getYearValue

        public int getYearValue()
        Returns the year in which the week falls, as an integer value.
        Returns:
        The year.
      • getWeek

        public int getWeek()
        Returns the week.
        Returns:
        The week.
      • getFirstMillisecond

        public long getFirstMillisecond()
        Returns the first millisecond of the week. This will be determined relative to the time zone specified in the constructor, or in the calendar instance passed in the most recent call to the peg(Calendar) method.
        Specified by:
        getFirstMillisecond in class RegularTimePeriod
        Returns:
        The first millisecond of the week.
        See Also:
        getLastMillisecond()
      • getLastMillisecond

        public long getLastMillisecond()
        Returns the last millisecond of the week. This will be determined relative to the time zone specified in the constructor, or in the calendar instance passed in the most recent call to the peg(Calendar) method.
        Specified by:
        getLastMillisecond in class RegularTimePeriod
        Returns:
        The last millisecond of the week.
        See Also:
        getFirstMillisecond()
      • peg

        public void peg​(java.util.Calendar calendar)
        Recalculates the start date/time and end date/time for this time period relative to the supplied calendar (which incorporates a time zone and information about what day is the first day of the week).
        Specified by:
        peg in class RegularTimePeriod
        Parameters:
        calendar - the calendar (null not permitted).
      • previous

        public RegularTimePeriod previous()
        Returns the week preceding this one. This method will return null for some lower limit on the range of weeks (currently week 1, 1900). For week 1 of any year, the previous week is always week 53, but week 53 may not contain any days (you should check for this). No matter what time zone and locale this instance was created with, the returned instance will use the default calendar for time calculations, obtained with RegularTimePeriod.getCalendarInstance().
        Specified by:
        previous in class RegularTimePeriod
        Returns:
        The preceding week (possibly null).
      • next

        public RegularTimePeriod next()
        Returns the week following this one. This method will return null for some upper limit on the range of weeks (currently week 53, 9999). For week 52 of any year, the following week is always week 53, but week 53 may not contain any days (you should check for this). No matter what time zone and locale this instance was created with, the returned instance will use the default calendar for time calculations, obtained with RegularTimePeriod.getCalendarInstance().
        Specified by:
        next in class RegularTimePeriod
        Returns:
        The following week (possibly null).
      • getSerialIndex

        public long getSerialIndex()
        Returns a serial index number for the week.
        Specified by:
        getSerialIndex in class RegularTimePeriod
        Returns:
        The serial index number.
      • getFirstMillisecond

        public long getFirstMillisecond​(java.util.Calendar calendar)
        Returns the first millisecond of the week, evaluated using the supplied calendar (which determines the time zone).
        Specified by:
        getFirstMillisecond in class RegularTimePeriod
        Parameters:
        calendar - the calendar (null not permitted).
        Returns:
        The first millisecond of the week.
        Throws:
        java.lang.NullPointerException - if calendar is null.
        See Also:
        RegularTimePeriod.getLastMillisecond(Calendar)
      • getLastMillisecond

        public long getLastMillisecond​(java.util.Calendar calendar)
        Returns the last millisecond of the week, evaluated using the supplied calendar (which determines the time zone).
        Specified by:
        getLastMillisecond in class RegularTimePeriod
        Parameters:
        calendar - the calendar (null not permitted).
        Returns:
        The last millisecond of the week.
        Throws:
        java.lang.NullPointerException - if calendar is null.
        See Also:
        RegularTimePeriod.getFirstMillisecond(Calendar)
      • toString

        public java.lang.String toString()
        Returns a string representing the week (e.g. "Week 9, 2002"). TODO: look at internationalisation.
        Overrides:
        toString in class RegularTimePeriod
        Returns:
        A string representing the week.
      • equals

        public boolean equals​(java.lang.Object obj)
        Tests the equality of this Week object to an arbitrary object. Returns true if the target is a Week instance representing the same week as this object. In all other cases, returns false.
        Overrides:
        equals in class java.lang.Object
        Parameters:
        obj - the object (null permitted).
        Returns:
        true if week and year of this and object are the same.
      • hashCode

        public int hashCode()
        Returns a hash code for this object instance. The approach described by Joshua Bloch in "Effective Java" has been used here:

        http://developer.java.sun.com/developer/Books/effectivejava /Chapter3.pdf

        Overrides:
        hashCode in class java.lang.Object
        Returns:
        A hash code.
      • compareTo

        public int compareTo​(java.lang.Object o1)
        Returns an integer indicating the order of this Week object relative to the specified object: negative == before, zero == same, positive == after.
        Specified by:
        compareTo in interface java.lang.Comparable
        Parameters:
        o1 - the object to compare.
        Returns:
        negative == before, zero == same, positive == after.
      • parseWeek

        public static Week parseWeek​(java.lang.String s)
        Parses the string argument as a week.

        This method is required to accept the format "YYYY-Wnn". It will also accept "Wnn-YYYY". Anything else, at the moment, is a bonus.

        Parameters:
        s - string to parse.
        Returns:
        null if the string is not parseable, the week otherwise.
      • findSeparator

        private static int findSeparator​(java.lang.String s)
        Finds the first occurrence of ' ', '-', ',' or '.'
        Parameters:
        s - the string to parse.
        Returns:
        -1 if none of the characters was found, the index of the first occurrence otherwise.
      • evaluateAsYear

        private static Year evaluateAsYear​(java.lang.String s)
        Creates a year from a string, or returns null (format exceptions suppressed).
        Parameters:
        s - string to parse.
        Returns:
        null if the string is not parseable, the year otherwise.
      • stringToWeek

        private static int stringToWeek​(java.lang.String s)
        Converts a string to a week.
        Parameters:
        s - the string to parse.
        Returns:
        -1 if the string does not contain a week number, the number of the week otherwise.