Java Calendar Calculate calculateWeeksInBetween(Calendar startPoint, Calendar endPoint)

Here you can find the source of calculateWeeksInBetween(Calendar startPoint, Calendar endPoint)

Description

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

License

Open Source License

Parameter

Parameter Description
startPoint a parameter
endPoint a parameter

Return

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

Declaration

public static int calculateWeeksInBetween(Calendar startPoint, Calendar endPoint) 

Method Source Code


//package com.java2s;
/*// w w  w  .  j  av a2  s  .  c  o 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."
 */

import java.util.Calendar;

public class Main {
    /**
     * 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

  1. calculateDuration(Calendar para_c1, Calendar para_c2)
  2. calculateHourDiff(Calendar cal1, Calendar cal2)
  3. calculateMinimalDaysInFirstWeek(Calendar calendar)
  4. calculateMonthsInBetween(Calendar startPoint, Calendar endPoint)
  5. calculateRangeInDays(Calendar start, Calendar end)
  6. calDateOnly(Calendar iniCal)
  7. calendarIterator(final int iterateType, final Calendar startCal, final Calendar endCal)
  8. cloneCalendar(Calendar in)
  9. copyCalendar(final Calendar calendar, final boolean stripTime)