• 自然月合同月的日期拆分


           /**
         * 自然月拆分
         * @param beginDate  开始时间
         * @return
         * beginDate 开始时间
         * endDate   本月结束时间
         * preDate   下月开始时间
         * dateNum   开始及结束时间之间的天数
         * mothNum   当月天数
         */
        public static ExtendMap<String, Object> naturalMonthSplit(Date beginDate){
            Date    preDate = DateUtils.ceiling(beginDate, Calendar.MARCH) ;  // 2018-04-01
            Date    endDate = DateUtils.addDays(preDate, -1)  ; // 2018-03-31
            long dateNum = DataTimeUtils.differentDate("DAY", beginDate, endDate)+ 1  ;          //26
            long mothNum = DataTimeUtils.differentDate("DAY", getPreMonthDate(beginDate), endDate)+1  ;           //31
            ExtendMap<String, Object> returnMap = new ExtendMap<>();
            returnMap.put("beginDate",beginDate);
            returnMap.put("endDate",endDate);
            returnMap.put("preDate", preDate);
            returnMap.put("dateNum", dateNum);
            returnMap.put("mothNum", mothNum);
            return returnMap ;
        }
        /**
         * 自然月拆分
         * 获取开始时间到结束时间中每个月的时间及天数
         * @param beginDate 开始时间
         * @param endDate   结束时间
         * @return
         */
        public static List<ExtendMap<String, Object>> naturalMonthSplit(Date beginDate , Date endDate){
            List<ExtendMap<String, Object>>  returnList = new  ArrayList<>();
            long num = DataTimeUtils.differentDate("M", beginDate, endDate);
            for(long  i=0; i<=num ; i++) {
                ExtendMap<String, Object> map = new ExtendMap<>();
                map = naturalMonthSplit(beginDate);
                if(i == num){
                    map.put("endDate", endDate);
                    map.put("dateNum", DataTimeUtils.differentDate("D", (Date) map.get("beginDate"), endDate)+1);
                }
                returnList.add(map);
                beginDate = (Date) map.get("preDate");
            }
            return returnList ;
        }
       
        /**
         * 合同月拆分
         * @param beginDate
         * @return
         */
        public static ExtendMap<String, Object> contractMonthSplit(Date beginDate) {
            ExtendMap<String, Object> map = new ExtendMap<>();
            Calendar cal1 = Calendar.getInstance();
            cal1.setTime(beginDate);
            int day = cal1.get(Calendar.DAY_OF_MONTH);
            Date afterDate;
            if(day > 27 ) {
                Date endDate = DateUtils.addMonths(beginDate, 1); 
                Date beginDateTemp =DateUtils.addDays(getPreMonthDate(endDate),-1) ;
                int dayEndNum = (int) DataTimeUtils.differentDate("D", beginDate, beginDateTemp) + 1 ;
                afterDate= DateUtils.addDays(getEndMonthDate(endDate), -dayEndNum);
                map.put("beginDate", beginDate);
                map.put("endDate", afterDate);
            }else {
                afterDate = DateUtils.addDays( DateUtils.addMonths(beginDate, 1),-1); 
                map.put("beginDate", beginDate);
                map.put("endDate", afterDate);
            }
            long dateNum = DataTimeUtils.differentDate("DAY", beginDate, afterDate)+ 1  ;            //26
            long mothNum = DataTimeUtils.differentDate("DAY", beginDate, afterDate)+ 1  ;
            map.put("dateNum", dateNum);
            map.put("mothNum", mothNum);
            return map ;
        }
       
        /**
         * 合同月拆分
         * @param beginDate
         * @param endDate
         * @return
         */
        public static  List<ExtendMap<String, Object>> contractMonthSplit(Date beginDate , Date endDate) {
            List<ExtendMap<String, Object>>  returnList = new  ArrayList<>();
            long num = DataTimeUtils.differentDate("M", beginDate, endDate);
            Date tempDate = beginDate ;
            for(int i=0;i<num;i++) {
                ExtendMap<String, Object> map  =contractMonthSplit(tempDate);
                tempDate = (Date) map.get("endDate");
                tempDate = DateUtils.addDays(tempDate, 1);
                if(i == num){
                    map.put("endDate", endDate);
                    map.put("dateNum", DataTimeUtils.differentDate("D", (Date) map.get("beginDate"), endDate)+1);
                }
                returnList.add(map);
            }
            return returnList ;
        }
        
       
        /**
         * 日期拆分调用
         * @param beginDate
         * @param endDate
         * @param type
         * @return
         */
        public static  List<ExtendMap<String, Object>> dateSplit(Date beginDate , Date endDate , Long type ) {
            if(type == 1) {
                return naturalMonthSplit(beginDate, endDate);
            }else{
                return contractMonthSplit(beginDate, endDate);
            }
        }
        
        
       
        
     
     
  • 相关阅读:
    POJ-2378 Tree Cutting
    ZOJ-3870 Team Formation
    POJ-1741 Tree (树上点分治)
    POJ-3107 Godfather
    HDU-3586 Information Disturbing(树形DP+删边)
    POJ 2796 (单调栈 + 前缀和)
    POJ 3250(单调栈)
    ATCoder 116 D (思维+贪心+栈)
    POJ2528 (离散化+线段树)
    HDU 2795(思维+线段树)
  • 原文地址:https://www.cnblogs.com/gemiaomiao/p/10550746.html
Copyright © 2020-2023  润新知