2013年7月3日 星期三

日期相減取得秒數

方法說明:
isHoliday() 方法判斷傳入日期是否為六日
getDuration() 方法回傳相減過後的秒數,包含六日
getTimeFrame() 方法回傳相減過後的秒數,不包含六日


/**
 * Check holiday
 *
 * @param startTime
 * @param endTime
 * @return true or false
 */
public static boolean isHoliday(Calendar calander) {
    boolean isHoliday = false;
    if (calander.get(Calendar.DAY_OF_WEEK) != Calendar.SATURDAY
            && calander.get(Calendar.DAY_OF_WEEK) != Calendar.SUNDAY) {
        isHoliday = false;
    } else {
        isHoliday = true;
    }
    return isHoliday;
}

/**
 * Get the total seconds between the startTime & endTime
 *
 * @param startTime
 * @param endTime
 * @return
 */
public static long getDuration(Date startTime, Date endTime) {
    long totalSeconds = 0;
    Calendar startCal = Calendar.getInstance();
    startCal.setTime(startTime);

    Calendar endCal = Calendar.getInstance();
    endCal.setTime(endTime);

    totalSeconds = (endCal.getTimeInMillis() - startCal.getTimeInMillis()) / 1000;

    return totalSeconds;
}

/**
 * Get the total seconds between the startTime & endTime (Without Sunday &
 * Saturday)
 *
 * @param startTime
 * @param endTime
 * @return
 */
public static long getTimeFrame(Date startTime, Date endTime) {
    long timeFrame = 0;
    Calendar startCal = Calendar.getInstance();
    startCal.setTime(startTime);
    //startCal.add(Calendar.DATE, -6);
    Calendar endCal = Calendar.getInstance();
    endCal.setTime(endTime);
    //endCal.add(Calendar.DATE, 1);

    int useDays = 0;
    long totalSeconds = 0;
    Calendar tmpDate = Calendar.getInstance();
    tmpDate.setTimeInMillis(startCal.getTimeInMillis());
    if (DateUtils.isSameDate(startCal, endCal) && startCal.before(endCal)) {
        useDays = 0;
        totalSeconds = (endCal.getTimeInMillis() - startCal.getTimeInMillis()) / 1000;
        return totalSeconds;
    } else if (!DateUtils.isSameDate(startCal, endCal) && startCal.before(endCal)) {
        long secondsPastOfEndTime = endCal.get(Calendar.SECOND) + endCal.get(Calendar.MINUTE) * 60
                + endCal.get(Calendar.HOUR_OF_DAY) * 60 * 60;
        long secondsRemainOfStartTime = 0;

        while (tmpDate.before(endCal)) {
            tmpDate.add(Calendar.DATE, 1);
            if (DateUtils.isSameDate(tmpDate, endCal)) {
                break;
            } else {
                if (!MxDateUtility.isHoliday(startCal) && MxDateUtility.isHoliday(endCal)) {
                    useDays++;
                } else {

                    if (tmpDate.get(Calendar.DAY_OF_WEEK) != Calendar.SATURDAY
                            && tmpDate.get(Calendar.DAY_OF_WEEK) != Calendar.SUNDAY) {

                        useDays++;
                    }
                }
            }
        }

        if (MxDateUtility.isHoliday(startCal) && !MxDateUtility.isHoliday(endCal)) {
            secondsRemainOfStartTime = 0;
        } else {
            secondsRemainOfStartTime = 86400 - (startCal.get(Calendar.SECOND) + startCal.get(Calendar.MINUTE) * 60 + startCal
                    .get(Calendar.HOUR_OF_DAY) * 60 * 60);
        }
        long secondsOfUseDays = useDays * 86400;

        totalSeconds = secondsRemainOfStartTime + secondsOfUseDays + secondsPastOfEndTime;

        return totalSeconds;
    } else {
        return 0;
    }
}

沒有留言:

張貼留言