java處理節假日和工作時間的工具類


import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;

/**
 * 節假日工作時間處理
 * 假日只處理今年、去年的  1.1、5.1、10.1,和周末
 */
public class HolidayUtil {

    private static SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
    private static SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    private static List<String> holidays = new ArrayList<String>();

    /**
     * 靜態塊初始化法定節日
     */
    static {
        Calendar c = Calendar.getInstance();
        holidays.add(c.get(Calendar.YEAR)-1 + "-01-01");
        holidays.add(c.get(Calendar.YEAR)-1 + "-05-01");
        holidays.add(c.get(Calendar.YEAR)-1 + "-10-01");
        holidays.add(c.get(Calendar.YEAR) + "-01-01");
        holidays.add(c.get(Calendar.YEAR) + "-05-01");
        holidays.add(c.get(Calendar.YEAR) + "-10-01");
    }

    /**
     * 判斷當天是否是節假日 節日只包含1.1;5.1;10.1
     * 
     * @param date 時間
     * @return 非工作時間:true;工作時間:false
     */
    public static boolean isHolidayOrFestival(Date date) {
        boolean result = false;
        boolean isHolidayTmp = isHoliday(date);
        if (isHolidayTmp) {
            result = true;
        } else {
            Calendar c = Calendar.getInstance();
            c.setTime(date);
            //周末直接為非工作時間
            if (c.get(Calendar.DAY_OF_WEEK) == Calendar.SUNDAY || c.get(Calendar.DAY_OF_WEEK) == Calendar.SATURDAY) {
                result = true;
            } else {//周內9點到17:30為工作時間
                int hour = c.get(Calendar.HOUR_OF_DAY);
                int minute = c.get(Calendar.MINUTE);
                if (hour < 9 || (hour == 17 && minute > 30) || hour >= 18) {
                    result = true;
                }
            }
        }
        return result;
    }

    /**
     * 非工作時間獲取最近的工作時間
     * @param date 時間
     * @return 返回處理后時間,格式:yyyy-MM-dd HH:mm:ss
     */
    public static String getPreWorkDay(Date date) {
        Calendar c = Calendar.getInstance();
        c.setTime(date);
        if (!isHolidayOrFestival(date)) {
            return datechange(date, "yyyy-MM-dd HH:mm:ss");
        }
        //如果是周日最近的工作日為周五,日期減去2
        if (c.get(Calendar.DAY_OF_WEEK) == Calendar.SUNDAY) {
            c.add(Calendar.DAY_OF_MONTH, -2);
        }
        //如果是周六最近的工作日為周五,日期減去1
        else if (c.get(Calendar.DAY_OF_WEEK) == Calendar.SATURDAY) {
            c.add(Calendar.DAY_OF_MONTH, -1);
        }
        //如果是周一,並且為早上9點之前,最近的工作日為周五,日期減去3
        else if (c.get(Calendar.DAY_OF_WEEK) == Calendar.MONDAY) {
            int hour = c.get(Calendar.HOUR_OF_DAY);
            if (hour < 9) {
                c.add(Calendar.DAY_OF_MONTH, -3);
            }
        }else{
            int hour = c.get(Calendar.HOUR_OF_DAY);
            if (hour < 9) {
                c.add(Calendar.DAY_OF_MONTH, -1);
            }
        }
        c.set(Calendar.HOUR_OF_DAY, 17);
        c.set(Calendar.MINUTE, 30);
        c.set(Calendar.SECOND, 0);
        return datechange(c.getTime(), "yyyy-MM-dd HH:mm:ss");
    }

    public static String datechange(Date date, String pattern) {
        SimpleDateFormat sdf = new SimpleDateFormat(pattern);
        String demo = sdf.format(date);
        return demo;
    }

    /**
     * 根據判斷當前時間是否是節日
     * 
     * @param date
     *            時間
     * @return
     */
    private static boolean isHoliday(Date date) {
        boolean result = false;
        String dateStr = sdf.format(date);
        if (holidays.size() > 0) {
            for (String holiday : holidays) {
                if (holiday.equals(dateStr)) {
                    result = true;
                    break;
                }
            }
        }
        return result;
    }

    public static void main(String[] args) throws ParseException {
        String d = "2017-07-20 18:31:58";
        System.out.println(getPreWorkDay(sdf1.parse(d)));
    }
}

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM