• 计算工作日之后N天的日期


    1、假期实体类:

      

    package com.smics.date;
    
    import java.io.Serializable;
    import java.util.Date;
    
    public class Vacation implements Serializable {
    
        private static final long serialVersionUID = 1L;
        private Date date;
        private int days;
    
        public Date getDate() {
            return date;
        }
    
        public void setDate(Date date) {
            this.date = date;
        }
    
        public int getDays() {
            return days;
        }
    
        public void setDays(int days) {
            this.days = days;
        }
    
    }

    2、日期之间的假期数目

      

    package com.smics.date;
    
    import java.io.BufferedReader;
    import java.io.File;
    import java.io.FileReader;
    import java.text.ParseException;
    import java.text.SimpleDateFormat;
    import java.util.ArrayList;
    import java.util.Calendar;
    import java.util.Date;
    import java.util.GregorianCalendar;
    import java.util.List;
    import java.util.Scanner;
    
    @SuppressWarnings({"rawtypes","unchecked"})
    public class DateToDate {
    
        /***************************************************************************
         * 在beginDate和endDate之间所包含假期的天数,若不包含则返回0; 假期和周末分别进行单独考虑!
         * 
         * @param list
         * @param beginDate
         * @param endDate
         * @return
         */
        public static int getContainVacation(List list, Date beginDate, Date endDate) {
            int days = 0;
            Calendar begincal = new GregorianCalendar();
            Calendar endcal = new GregorianCalendar();
            begincal.setTime(beginDate);
            endcal.setTime(endDate);
    
            for (int i = 0; i < list.size(); i++) {
                System.out.println("执行到这里了!");
                Vacation vac = (Vacation) list.get(i);
                Date tempDate = vac.getDate();
                Calendar tempcal = new GregorianCalendar();
                tempcal.setTime(tempDate);
                int tempDays = vac.getDays();
                int tempDay = tempcal.get(Calendar.DAY_OF_YEAR);
                int dd = 0;
                if ((tempDate.after(endDate)) || (tempDate.before(beginDate))) {
                    System.out.println(tempDate.after(endDate));
                    System.out.println("执行到这里了吗???!");
                    continue;
                } else {
                    System.out.println("应该执行到这里了!@");
                    while (tempDay < endcal.get(Calendar.DAY_OF_YEAR)
                            && dd < tempDays) {
                        System.out.println("符合条件吗????");
                        // tempcal.set(Calendar.DAY_OF_MONTH,tempDay);//原来是你在作怪!
                        // 节假日和周末可能有重叠的情况!
                        if ((tempcal.get(Calendar.DAY_OF_WEEK)) == 2
                                || (tempcal.get(Calendar.DAY_OF_WEEK) == 1)) {
                            System.out.println((tempcal.get(Calendar.DAY_OF_WEEK)) == 2);
                            System.out.println((tempcal.get(Calendar.DAY_OF_WEEK) == 1));
                            System.out.println("节假日和周末重叠的情况!"
                                    + tempcal.get(Calendar.DAY_OF_WEEK));
                            days--;
                        }
                        tempcal.add(Calendar.DAY_OF_WEEK, 1);
                        dd++;// 计数器自增,不能超出法定的假期数。
                        days++;// 符合这两种条件的自增。看一下有多少天!
                        tempDay++;// 法定假日自增,不能超出endDate的日期数!
                    }
                }
            }
            // 单独考虑周末的情况!不知道哪一个数字代表周六,周日!
            System.out.println("周末!");
            for (int j = begincal.get(Calendar.DAY_OF_YEAR); j <= endcal
                    .get(Calendar.DAY_OF_YEAR); j++) {
                if (begincal.get(Calendar.DAY_OF_WEEK) == 7
                        || begincal.get(Calendar.DAY_OF_WEEK) == 1) {
                    System.out.println("周末判断!");
                    days++;
                }
                begincal.add(Calendar.DAY_OF_YEAR, 1);
            }
            return days;
        }
    
        /***************************************************************************
         * 从文件中读取字符串到集合中,然后返回集合。
         * 
         * @param file
         * @return
         * @throws Exception
         */
        public static List getDateFromFile(File file) throws Exception {
            List list = new ArrayList();
            BufferedReader breader = new BufferedReader(new FileReader(file));
            String str = "";
            while ((str = breader.readLine()) != null) {
                Vacation vac = DateToDate.divideStr(str);
                list.add(vac);
            }
            System.out.println(list);
            return list;
        }
    
        /***************************************************************************
         * 将字符串最终切割成一个假期对象!
         * 
         * @param str
         * @return
         * @throws ParseException
         */
        public static Vacation divideStr(String str) throws ParseException {
            Vacation vac = new Vacation();
            String[] array = str.split(",");
            SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
            Date date = format.parse(array[0]);
            int days = Integer.parseInt(array[1]);
            vac.setDate(date);
            vac.setDays(days);
            return vac;
        }
    
        /***************************************************************************
         * 输入的前后两天之间的相差的天数!
         * 
         * @param beginDate
         * @param endDate
         * @return
         */
        public static int getDays(Date beginDate, Date endDate) {
            long days = 0;
            try {
                if (beginDate.compareTo(endDate) > 0) {
                    throw new IllegalArgumentException("日期输入不正确!");
                }
                days = (endDate.getTime() - beginDate.getTime())
                        / (1000 * 60 * 60 * 24);
            } catch (Exception e) {
                e.getStackTrace();
            }
            return (int) days;
        }
    
        /***
         * 从键盘标准输入两个日期!
         * 
         * @return
         */
        public static String[] getInDate() {
            System.out.println("请输入开始和结束日期!格式如下:yyyy-MM-dd");
            Scanner scanner = new Scanner(System.in);
            String str = scanner.nextLine();
            String[] array = str.split(",");
            return array;
        }
    
        public static void main(String args[]) {
            String[] str = DateToDate.getInDate();
            SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
            try {
                Date beginDate = format.parse(str[0]);
                Date endDate = format.parse(str[1]);
                File file = new File("D:\java\file\jinxing.txt");
                List list = DateToDate.getDateFromFile(file);
                int days = DateToDate.getContainVacation(list, beginDate, endDate);
                System.out.println("总共的节假日包括周末:" + days);
                int allday = DateToDate.getDays(beginDate, endDate);
                System.out.println("总共的天数:" + allday);
                System.out.println("总共的工作日为:" + (allday - days));
            } catch (Exception e) {
                e.getStackTrace();
            }
        }
    
    }

    3、计算工作日之后N天的日期

      

    package com.smics.date;
    
    import java.io.BufferedReader;
    import java.io.File;
    import java.io.FileReader;
    import java.text.ParseException;
    import java.text.SimpleDateFormat;
    import java.util.ArrayList;
    import java.util.Calendar;
    import java.util.Date;
    import java.util.List;
    import java.util.Scanner;
    
    /**
     * Gets the date of N days after the specified date
    * @package com.smics.date
    * @file WorkDate.java
    * @author E047352
    * @date 2018-12-11 PM 05:11:50
    * @version V 1.0
     */
    public class WorkDate {
    
        /***************************************************************************
         * Calculate the date after the working day by the given date and working day!
         * 
         * @param beginDate
         * @param workDays
         */
        public static Date getDate(Date beginDate, int workDays, List<Vacation> list) {
            Date endDate = beginDate;
            Calendar calBegin = Calendar.getInstance();
            calBegin.setTime(beginDate);
            int count = 1;
            Calendar calFile = Calendar.getInstance();
            while (count <= workDays) {
                int tempBeginWeek = calBegin.get(Calendar.DAY_OF_WEEK);
                if (tempBeginWeek < 7 && tempBeginWeek > 1) {
                    // Number of days to cycle its holidays!
                    for (int i = 0; i < list.size(); i++) {
                        //System.out.println("It should be recycled at least twice!!");
                        Vacation vac = (Vacation) list.get(i);
                        Date fileDate = vac.getDate();
                        calFile.setTime(fileDate);
                        int fileDay = vac.getDays();
                        int tempFileDays = calFile.get(Calendar.DAY_OF_YEAR);// The Days of the Year
                        //System.out.println("Which day of the year is it:" + tempFileDays);
                        //System.out.println("What day is today:" + tempBeginWeek);
                        for (int j = tempFileDays; j < (tempFileDays + fileDay); j++) {
                            if (calBegin.get(Calendar.DAY_OF_YEAR) == j) {
                                
                                count--;
                            }
                        }
                    }
                    count++;
                }
                calBegin.add(Calendar.DATE, 1);
            }
            endDate = calBegin.getTime();
            return endDate;
        }
    
        /***************************************************************************
         * Get holidays from files and return to a collection!
         * 
         * @param file
         * @return
         * @throws Exception
         */
        public static List<Vacation> getListVacation(File file) throws Exception {
            List<Vacation> list = new ArrayList<Vacation>();
            list = (List<Vacation>) WorkDate.getVacationDateFromFile(file);
            return list;
        }
    
        /***************************************************************************
         * Standard input, input start date and workday parameters from the screen!!
         * 
         * @return
         */
        public static String[] getIn() {
            System.out.println("Please enter the start date and workday parameter!!");
            String str = "";
            Scanner scanner = new Scanner(System.in);
            str = scanner.nextLine();
            String[] array = str.split(",");
            while (true) {
                if (array.length <= 1) {
                    System.out.println("Please enter the required parameters correctly!");
                    str = scanner.nextLine();
                    array = str.split(",");
                } else {
                    break;
                }
            }
            return array;
        }
    
        /***************************************************************************
         * Split the string and return a Vacation object!
         * 
         * @param str
         * @return
         * @throws ParseException
         */
        public static Vacation divideStr(String[] array) throws ParseException {
            Vacation vac = new Vacation();
            SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            Date date = format.parse(array[0]);
            vac.setDate(date);
            int days = Integer.parseInt(array[1]);
            vac.setDays(days);
            return vac;
        }
        /**
         * Read the string from the file into the collection, and then return to the collection.
         * 
         * @param file
         * @return
         * @throws Exception
         */
        
        public static List<Vacation> getVacationDateFromFile(File file)
                throws Exception {
            List<Vacation> list = new ArrayList<Vacation>();
            BufferedReader breader = new BufferedReader(new FileReader(file));
            String str = "";
            while ((str = breader.readLine()) != null) {
                Vacation vac = DateToDate.divideStr(str);
                list.add(vac);
            }
            return list;
        }
    
        public static void main(String args[]) {
            try {
                File file = new File("D:\java\file\jinxing.txt");
                List<Vacation> list = WorkDate.getListVacation(file);
                Vacation vac = WorkDate.divideStr(WorkDate.getIn());
                Date date = WorkDate.getDate(vac.getDate(), vac.getDays(), list);
                System.out.println("Is this here?");
                SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
                String strDate = format.format(date);
                System.out.println("Dates after "+vac.getDays()+" working days are:" + strDate);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    
    }
  • 相关阅读:
    python 获取当前时间
    PHP基础
    python 编码
    系统分区表 MBR GPT
    python mysql like查询的写法
    JSP JavaBean
    jsp MVC
    python 正则例子
    Java版A星算法
    linux 部署subversion独立服务器
  • 原文地址:https://www.cnblogs.com/mophy/p/10114262.html
Copyright © 2020-2023  润新知