java按指定时间拆分月份

来源:互联网 发布:淘宝大卖家如何放单 编辑:程序博客网 时间:2024/06/18 07:10
      /**     * 按月份拆分     *      * @param startTime 开始时间     * @param endTime 结束时间     * @param intervalDay 指定日     * @return     * @author Shi Zezhu     * @date 2017年8月2日 下午3:56:05     */    public static List<Timestamp> splitMonth(Timestamp startTime, Timestamp endTime, Integer intervalDay) {       List<Timestamp> list = new ArrayList<Timestamp>();        if (startTime == null || endTime == null) {            return list;        }        Calendar startCalendar = Calendar.getInstance();        startCalendar.setTime(startTime);        Calendar endCalendar = Calendar.getInstance();        endCalendar.setTime(endTime);        Calendar nextCalendar = Calendar.getInstance();        nextCalendar.set(startCalendar.get(Calendar.YEAR), startCalendar.get(Calendar.MONTH), startCalendar.get(Calendar.DAY_OF_MONTH), 23, 59, 59);        nextCalendar.set(Calendar.MILLISECOND, 0);        list.add(startTime);        while (intervalDay != null) {            if (intervalDay < 1) {                intervalDay = 1;            }            if (intervalDay == 1) {                nextCalendar.add(Calendar.MONTH, 1);            }            nextCalendar.set(Calendar.DAY_OF_MONTH, nextCalendar.getActualMaximum(Calendar.DAY_OF_MONTH) > intervalDay ? intervalDay - 1  : nextCalendar.getActualMaximum(Calendar.DAY_OF_MONTH) - 1);            if (nextCalendar.compareTo(endCalendar) != -1) {                break;            }            if (startCalendar.before(nextCalendar)) {                startCalendar.setTime(nextCalendar.getTime());                list.add(new Timestamp(startCalendar.getTimeInMillis()));                startCalendar.add(Calendar.SECOND, 1);                list.add(new Timestamp(startCalendar.getTimeInMillis()));            }            nextCalendar.add(Calendar.MONTH, 1);        }        list.add(endTime);        return list;    }        /**     * 按月份拆分     *      * @param startTime 开始时间     * @param endTime 结束时间     * @return     * @author Shi Zezhu     * @date 2017年8月2日 下午3:56:05     */    public static List<Timestamp> splitMonth(Timestamp startTime, Timestamp endTime) {        return splitMonth(startTime, endTime, null);    }        public static void main(String[] args) throws ParseException {        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");        Timestamp startTime = new Timestamp(sdf.parse("2016-12-1 15:30:26").getTime());        Timestamp endTime = new Timestamp(sdf.parse("2017-3-18 18:30:26").getTime());        List<Timestamp> list = splitMonth(startTime, endTime, 31);        for (Timestamp t : list) {            System.out.println(sdf.format(t));        }    }

输出:

2016-12-01 15:30:26

2016-12-30 23:59:59

2016-12-31 00:00:00

2017-01-30 23:59:59

2017-01-31 00:00:00

2017-02-27 23:59:59

2017-02-28 00:00:00

2017-03-18 18:30:26


使用:

for (int i = 0; i < splitTime.size();) {
                    Timestamp startTimeSub = splitTime.get(i++);
                    Timestamp endTimeSub = splitTime.get(i++);

                     ................

}

原创粉丝点击