zoukankan      html  css  js  c++  java
  • 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)));
        }
    }
    

      

  • 相关阅读:
    学习 Web 开发技术的16个最佳教程网站和博客
    将会改变未来IT世界的十种编程语言
    用来理解 Java 编程语言的 8 个图表
    花样Android ProgressBar
    Android控件TextProgressBar进度条上显文字
    ViewFlipper 在同一背景下 页面左右滑动
    Android自定义进度条-带文本(文字进度)的水平进度条(ProgressBar)
    android用户界面之GridView教程实例汇总
    禁止ScrollView在子控件的布局改变时自动滚动的的方法
    ListView中使用自定义Adapter及时更xin
  • 原文地址:https://www.cnblogs.com/skyfeng/p/7211426.html
Copyright © 2011-2022 走看看