returns number of weeks from date of startPoint till date of endPoint 1. - Java java.util

Java examples for java.util:Week

Description

returns number of weeks from date of startPoint till date of endPoint 1.

Demo Code

/*/*from  w  w  w  .j a va2  s  .  co  m*/
 * Copyright 2009 Yodlee, Inc.  All Rights Reserved.  Your use of this code 
 * requires a license from Yodlee.  Any such license to this code is 
 * restricted to evaluation/illustrative purposes only. It is not intended 
 * for use in a production environment, and Yodlee disclaims all warranties 
 * and/or support obligations concerning this code, regardless of the terms 
 * of any other agreements between Yodlee and you."
 */
//package com.java2s;
import java.util.Calendar;

public class Main {
    public static void main(String[] argv) throws Exception {
        Calendar startPoint = Calendar.getInstance();
        Calendar endPoint = Calendar.getInstance();
        System.out.println(calculateWeeksInBetween(startPoint, endPoint));
    }

    /**
     * returns number of weeks from date of startPoint till date of endPoint
     *
     * <pre>
     *     1. returns 0 if startPoint and endPoint are in the same week
     *     2. returns a positive no. if week of startPoint is before week of endPoint
     *     3. returns a negative no. if week of startPoint is after week of endPoint
     * </pre>
     *
     * @param startPoint
     * @param endPoint
     *
     * @return returns number of weeks from date of startPoint till date of
     *         endPoint
     */
    public static int calculateWeeksInBetween(Calendar startPoint,
            Calendar endPoint) {

        int numWeeks = 0;

        Calendar tempCalendar = (Calendar) startPoint.clone();
        int compare = startPoint.getTime().compareTo(endPoint.getTime());
        if (compare <= 0) {

            while (!isSameWeekOfYear(tempCalendar, endPoint)) {
                incrementOneWeek(tempCalendar);
                numWeeks++;
            }
        } else {

            while (!isSameWeekOfYear(tempCalendar, endPoint)) {
                decrementOneWeek(tempCalendar);
                numWeeks--;
            }
        }

        return numWeeks;
    }

    public static boolean isSameWeekOfYear(Calendar calendar1,
            Calendar calendar2) {

        boolean sameWeek = false;

        // if same year check if same week
        if (getYear(calendar1) == getYear(calendar2)) {
            if (getWeek(calendar1) == getWeek(calendar2))
                sameWeek = true;
        }
        /*
         * else if different years check if the two points fall in the same
         * week. e.g : 29th December 2003 and 2nd January 2004 fall in different
         * years but same week
         */
        else {
            Calendar calendar1Temp = (Calendar) calendar1.clone();
            Calendar calendar2Temp = (Calendar) calendar2.clone();
            setTimeAsFirstDayOfWeek(calendar1Temp);
            setTimeAsFirstDayOfWeek(calendar2Temp);
            if (isSameDayOfYear(calendar1Temp, calendar2Temp))
                sameWeek = true;
        }

        return sameWeek;
    }

    public static void incrementOneWeek(Calendar calendar) {

        int monthBeforeIncrement = calendar.get(Calendar.MONTH);
        calendar.add(Calendar.WEEK_OF_YEAR, 1);
        int monthAfterIncrement = calendar.get(Calendar.MONTH);

        // if year changes setMinimalDaysInFirstWeek for New Year
        if (monthBeforeIncrement == Calendar.DECEMBER
                && monthAfterIncrement == Calendar.JANUARY) {
            calendar.setMinimalDaysInFirstWeek(calculateMinimalDaysInFirstWeek(calendar));
        }
    }

    public static void decrementOneWeek(Calendar calendar) {

        int monthBeforeDecrement = calendar.get(Calendar.MONTH);
        calendar.add(Calendar.WEEK_OF_YEAR, -1);
        int monthAfterDecrement = calendar.get(Calendar.MONTH);

        // if year changes setMinimalDaysInFirstWeek for New Year
        if (monthBeforeDecrement == Calendar.JANUARY
                && monthAfterDecrement == Calendar.DECEMBER) {
            calendar.setMinimalDaysInFirstWeek(calculateMinimalDaysInFirstWeek(calendar));
        }
    }

    public static int getYear(Calendar calendar) {
        return calendar.get(Calendar.YEAR);
    }

    public static int getWeek(Calendar calendar) {
        return calendar.get(Calendar.WEEK_OF_YEAR);
    }

    public static void setTimeAsFirstDayOfWeek(Calendar calendar) {

        int monthBeforeSet = calendar.get(Calendar.MONTH);
        calendar.set(Calendar.DAY_OF_WEEK, calendar.getFirstDayOfWeek());
        int monthAfterSet = calendar.get(Calendar.MONTH);

        // if year changes setMinimalDaysInFirstWeek for New Year
        if (monthBeforeSet == Calendar.JANUARY
                && monthAfterSet == Calendar.DECEMBER) {
            calendar.setMinimalDaysInFirstWeek(calculateMinimalDaysInFirstWeek(calendar));
        }
        normalise(calendar);
    }

    public static boolean isSameDayOfYear(Calendar calendar1,
            Calendar calendar2) {

        return (getYear(calendar1) == getYear(calendar2))
                && (getDay(calendar1) == getDay(calendar2));
    }

    public static int calculateMinimalDaysInFirstWeek(Calendar calendar) {

        Calendar temp = (Calendar) calendar.clone();
        temp.set(Calendar.DAY_OF_YEAR, 1);
        int firstDayOfJan = temp.get(Calendar.DAY_OF_WEEK);
        return 8 - firstDayOfJan;
    }

    public static void normalise(Calendar calendar) {

        Calendar tempCalendar = (Calendar) calendar.clone();
        calendar.clear();
        calendar.set(Calendar.YEAR, tempCalendar.get(Calendar.YEAR));
        calendar.set(Calendar.DAY_OF_YEAR,
                tempCalendar.get(Calendar.DAY_OF_YEAR));
    }

    public static int getDay(Calendar calendar) {
        return calendar.get(Calendar.DAY_OF_YEAR);
    }
}

Related Tutorials