⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 calendarutil.java

📁 国外的一套开源CRM
💻 JAVA
字号:
/*
 * 
 * Copyright (c) 2004 SourceTap - www.sourcetap.com
 *
 *  The contents of this file are subject to the SourceTap Public License 
 * ("License"); You may not use this file except in compliance with the 
 * License. You may obtain a copy of the License at http://www.sourcetap.com/license.htm
 * Software distributed under the License is distributed on an  "AS IS"  basis,
 * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for
 * the specific language governing rights and limitations under the License.
 *
 * The above copyright notice and this permission notice shall be included
 * in all copies or substantial portions of the Software.
 *
 */

package com.sourcetap.sfa.activity;

import java.util.Calendar;
import java.util.Date;

import org.ofbiz.base.util.Debug;
import org.ofbiz.entity.GenericDelegator;

import com.sourcetap.sfa.util.Preference;
import com.sourcetap.sfa.util.UserInfo;


/**
 * DOCUMENT ME!
 *
 */
public class CalendarUtil {
	
	public static final String module = CalendarUtil.class.getName();

    public static final String[] monthLabel = {
        "", "January", "February", "March", "April", "May", "June", "July",
        "August", "September", "October", "November", "December"
    };
    public static final String[] dayLabel = {
        "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday",
        "Saturday"
    };
    
    public static final int[] months = {
    	Calendar.JANUARY, Calendar.FEBRUARY, Calendar.MARCH, Calendar.APRIL, Calendar.MAY, Calendar.JUNE,
    	Calendar.JULY, Calendar.AUGUST, Calendar.SEPTEMBER, Calendar.OCTOBER, Calendar.NOVEMBER, Calendar.DECEMBER
    };
    
    public static final int[] daysInMonth = {
        0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31
    };

    /**
     * DOCUMENT ME!
     *
     * @return 
     */
    public static String[] getMonthLabels() {
        return monthLabel;
    }

    /**
     * DOCUMENT ME!
     *
     * @return 
     */
    public static String[] getDayLabels() {
        return dayLabel;
    }

    /**
     * DOCUMENT ME!
     *
     * @return 
     */
    public static int[] getDaysInMonth() {
        return daysInMonth;
    }

    /**
     * DOCUMENT ME!
     *
     * @param year 
     * @param month 
     * @param day 
     *
     * @return 
     */
    public static Calendar getCalendar(int year, int month, int day) {
		Calendar calendar = Calendar.getInstance();

        if (year <= 0) {
            year = calendar.get(Calendar.YEAR);
        }

        if ((month <= 0) || (month > 12)) {
            month = calendar.get(Calendar.MONTH) + 1;
        }

        if (day <= 0) {
            day = calendar.get(Calendar.DAY_OF_MONTH);
        }

        calendar.clear();

		calendar.set(Calendar.MONTH, months[month]);
		calendar.set(Calendar.YEAR, year);
		calendar.set(Calendar.DAY_OF_MONTH, day);

        return calendar;
    }

	public static int convertCalendarMonthToFiscalMonth( int calMonth, int fiscalYearStartMonth )
	{
		int month = ( 12 + calMonth - fiscalYearStartMonth + 1) % 12;
		if ( month == 0)
			month = 12;
		return month;
	}
	
	public static int getQuarter( int calMonth, int fiscalYearStartMonth)
	{
		int month = convertCalendarMonthToFiscalMonth( calMonth, fiscalYearStartMonth);
		int quarter = ((month-1) / 3) + 1;
		return quarter;
	}
	
	public static String getQuarterString(int month)
	{
		return getQuarterString(month, 1);
	}
	
    /**
     * DOCUMENT ME!
     *
     * @param month 
     *
     * @return 
     */
    public static String getQuarterString(int month, int fiscalYearStartMonth) {
        if (month <= 0) {
            month = (Calendar.getInstance().get(Calendar.MONTH) + 1);
        }

        String returnString = "";

		// handle fyOffset
        int quarter = getQuarter(month, fiscalYearStartMonth);

		switch ( quarter )
		{
			case 1:
				returnString = "Q1";
				break;
			case 2:
				returnString = "Q2";
				break;
			case 3:
				returnString = "Q3";
				break;
			case 4:
				returnString = "Q4";
				break;
			default:
				returnString = "Q?";
				Debug.logError("invalid quarter:" + quarter + " for m,fyM = " + month + ", " + fiscalYearStartMonth, module);
				break;				
		}

        return returnString;
    }
    

	public static String[] getQuarterMonthNames(int month, int fiscalYearStartMonth)
	{
		return getQuarterMonthLabels(month, fiscalYearStartMonth);
	}
	
    /**
     * DOCUMENT ME!
     *
     * @param month 
     *
     * @return 
     */
    public static String[] getQuarterMonthLabels(int month, int fiscalYearStartMonth) {
        if (month <= 0) {
            month = (Calendar.getInstance().get(Calendar.MONTH) + 1);
        }

		int[] monthNumbers = getQuarterMonthNumbers(month, fiscalYearStartMonth);
		
		String[] returnString = new String[3];

		for ( int i = 0; i < 3; i++)
			returnString[i] = monthLabel[ monthNumbers[i] ];

        return returnString;
    }

	public static int[] getQuarterMonthNumbers(int month, int fiscalYearStartMonth)
	{
		return getQuarterNumbers(month, fiscalYearStartMonth);
	}
    /**
     * DOCUMENT ME!
     *
     * @param month 
     *
     * @return 
     */
    public static int[] getQuarterNumbers(int month, int fiscalYearStartMonth) {
        if (month <= 0) {
            month = (Calendar.getInstance().get(Calendar.MONTH) + 1);
        }

        int[] returnNumbers = new int[3];
        
		// handle fyOffset
		
		int quarter = getQuarter(month, fiscalYearStartMonth);
		int firstMonth = (fiscalYearStartMonth  + (quarter - 1)*3)%12 ;

		for ( int i = 0; i < 3; i++)
		{
			returnNumbers[i] = ((firstMonth + i) % 12 );
			if ( returnNumbers[i] == 0)
				returnNumbers[i] = 12;
		}

        return returnNumbers;
    }

    /**
     * DOCUMENT ME!
     *
     * @param month 
     *
     * @return 
     */
    public static int[] getPreviousQuarterNumbers(int month, int fiscalYearStartMonth) {
    	
    	int[] currentNumbers = getQuarterNumbers(month, fiscalYearStartMonth);

    	
		int[] returnNumbers = new int[3];

    	for ( int i=0; i < 3; i ++)
    	{
			returnNumbers[i] = ( 12 + currentNumbers[i] - 3 ) % 12;
			if ( returnNumbers[i] == 0 )
				returnNumbers[i] = 12;
		}
			    		
        return returnNumbers;
    }

    /**
     * DOCUMENT ME!
     *
     * @param month 
     *
     * @return 
     */
    public static int[] getNextQuarterNumbers(int month, int fiscalYearStartMonth) {

		int[] currentNumbers = getQuarterNumbers(month, fiscalYearStartMonth);

        int[] returnNumbers = new int[3];

		for ( int i=0; i < 3; i ++)
		{
			returnNumbers[i] = ( currentNumbers[i] + 3 ) % 12;
			if ( returnNumbers[i] == 0 )
				returnNumbers[i] = 12;
		}

        return returnNumbers;
    }

    /**
     * DOCUMENT ME!
     *
     * @param month 
     * @param year 
     *
     * @return 
     */
    public static Date getMinimumQuarterDate(int month, int year, int fiscalYearStartMonth) {
        if (month <= 0) {
            month = (Calendar.getInstance().get(Calendar.MONTH) + 1);
        }

        if (year <= 0) {
            year = (Calendar.getInstance().get(Calendar.YEAR));
        }

		int monthNumbers[] = getQuarterMonthNumbers(month, fiscalYearStartMonth);
		int firstMonth = monthNumbers[0];
		
        Calendar calendar = Calendar.getInstance();
        if ( firstMonth < fiscalYearStartMonth )
        	year++;
        	
        calendar.set(Calendar.YEAR, year);
        calendar.set(Calendar.MONTH, firstMonth - 1);
        calendar.set(Calendar.DAY_OF_MONTH, 1);

        return calendar.getTime();
    }

    /**
     * DOCUMENT ME!
     *
     * @param month 
     * @param year 
     *
     * @return 
     */
    public static Date getMaximumQuarterDate(int month, int year, int fiscalYearStartMonth) {
        if (month <= 0) {
            month = (Calendar.getInstance().get(Calendar.MONTH) + 1);
        }

        if (year <= 0) {
            year = (Calendar.getInstance().get(Calendar.YEAR));
        }
        
		int monthNumbers[] = getQuarterMonthNumbers(month, fiscalYearStartMonth);
		int lastMonth = monthNumbers[2] + 1;
		if (lastMonth < 12 )
			lastMonth = lastMonth % 12;

        Calendar calendar = Calendar.getInstance();

		if ( lastMonth <= fiscalYearStartMonth )
			 year++;
        calendar.set(Calendar.YEAR, year);
		calendar.set(Calendar.MONTH, lastMonth - 1);
		calendar.set(Calendar.DAY_OF_MONTH, 1);
		calendar.add(Calendar.DATE, -1);
		
        return calendar.getTime();
    }


    /**
     * DOCUMENT ME!
     *
     * @param startDate 
     * @param endDate 
     * @param calendarReturnField 
     *
     * @return 
     */
    public static int differenceBetweenDates(Calendar startDate,
        Calendar endDate, int calendarReturnField) {
        int returnInt = -1;

        if (startDate.before(endDate)) {
            switch (calendarReturnField) {

            case Calendar.MONTH:

                if (startDate.get(Calendar.YEAR) == endDate.get(Calendar.YEAR)) {
                    //same year
                    returnInt = (endDate.get(Calendar.MONTH -
                            startDate.get(Calendar.MONTH)));
                } else {
                    //cross years
                    returnInt = endDate.get(Calendar.MONTH) + 1;

                    if ((endDate.get(Calendar.YEAR) -
                            startDate.get(Calendar.YEAR)) > 1) {
                        int numYrs = (endDate.get(Calendar.YEAR) -
                            startDate.get(Calendar.YEAR));
                        returnInt = returnInt + (12 * numYrs);
                    }

                    returnInt = returnInt +
                        (12 - (startDate.get(Calendar.MONTH) + 1));
                }

                break;

            case Calendar.DAY_OF_MONTH:

                if (startDate.get(Calendar.YEAR) == endDate.get(Calendar.YEAR)) {
                    if (startDate.get(Calendar.MONTH) == endDate.get(Calendar.MONTH)) {
                        //same year, same month
                        returnInt = (endDate.get(Calendar.DAY_OF_MONTH) -  startDate.get(Calendar.DAY_OF_MONTH));
                    } else {
                        //same year, cross months
                        returnInt = (endDate.get(Calendar.DAY_OF_YEAR) - startDate.get(Calendar.DAY_OF_YEAR));
                    }
                } else {
                    //cross years, cross months
                    //get number of days between years
                    //get number 
                    //TODO: Finish this part of the method
                }

                break;

            case Calendar.DAY_OF_YEAR:

                if (startDate.get(Calendar.YEAR) == endDate.get(Calendar.YEAR)) {
                    returnInt = endDate.get(Calendar.DAY_OF_YEAR) - startDate.get(Calendar.DAY_OF_YEAR);
                } else {
                    returnInt = endDate.get(Calendar.DAY_OF_YEAR);

                    if ((endDate.get(Calendar.YEAR) - startDate.get(Calendar.YEAR)) > 1) {
                        int numYrs = (endDate.get(Calendar.YEAR) - startDate.get(Calendar.YEAR));
                        returnInt = returnInt + (365 * numYrs);
                    }

                    returnInt = returnInt + (365 - (startDate.get(Calendar.DAY_OF_YEAR)));
                }

                break;

            case Calendar.YEAR:
                returnInt = (endDate.get(Calendar.YEAR) - startDate.get(Calendar.YEAR));
                break;

            default:
                break;

            }
        }

        return returnInt;
    }
    
    public static int getFiscalYearStartMonth( GenericDelegator delegator, UserInfo userInfo )
    {
		Preference pref = Preference.getInstance(delegator);
   
		int FYStartMonth = pref.getPreference(userInfo.getPartyId(), userInfo.getAccountId(), "FISCAL_YEAR_START", 1);
		
		return FYStartMonth;
    }
    
    


}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -