Java examples for java.util:Week
returns number of weeks from date of startPoint till date of endPoint 1.
/*/*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); } }