关于处理时间段的工具类


关于日期处理,由于需要,将时间段按周、月、季划分成时间段。周是以周一为第一天进行划分


import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.*;

public class DateProcess {

    public static void main(String[] args) {
        String starttime = "2018-06-28";
        String endtime = "2019-09-22";
        Map<String,String> map = new LinkedHashMap<String,String>();

        //dateWeekProcess(starttime,endtime,map);
        //dateMonthProcess(starttime,endtime,map);
        dateSeasonProcess(starttime,endtime,map);
        System.out.println(map);
    }

    /**
     * 将时间段拆分成一周为格式的时间段
     * @param starttime
     * @param endtime
     * @param map
     */
    public static void dateWeekProcess(String starttime, String endtime,
                             Map<String,String> map){
        DateFormat dateFormat1 = new SimpleDateFormat("yyyy-MM-dd");
        DateFormat dateFormat2 = new SimpleDateFormat("yyyy年MM月dd日");
        Date startdata= null;
        long enddata= 0;
        long time = 0;
        Date last = null;
        String lastday = "";
        String format = "";
        //开始时间必须小于结束时间
        try {
            startdata = dateFormat1.parse(starttime);
            Date parse = dateFormat1.parse(endtime);
            enddata = parse.getTime();
            format = dateFormat2.format(parse);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        //开始日期
        Calendar startCal = Calendar.getInstance();
        startCal.setTime(startdata);
        //开始时间
        String firstday = dateFormat2.format(startCal.getTime());
        startCal.setFirstDayOfWeek(Calendar.MONDAY); //设置每周的第一天为星期一
        int i = startCal.get(Calendar.DAY_OF_WEEK)-1;
        //获取当前日期的年份和第几周
        int week = startCal.get(Calendar.WEEK_OF_YEAR);
        int year = startCal.get(Calendar.YEAR);
        //System.out.println("判断是周几:"+i);
        if(i==1){
            startCal.add(Calendar.DAY_OF_YEAR,6);
            last = startCal.getTime();
            lastday = dateFormat2.format(last);
        }else if(i==0){
            last = startCal.getTime();
            lastday = dateFormat2.format(last);
        }else{
            startCal.add(Calendar.DAY_OF_YEAR,7-i);
            last = startCal.getTime();
            lastday = dateFormat2.format(startCal.getTime());
        }
        try {
            time = dateFormat1.parse(dateFormat1.format(last)).getTime();
        } catch (ParseException e) {
            e.printStackTrace();
        }

        if(enddata>time){
            map.put(year+"-"+week,firstday+"-"+lastday);
            //System.out.println("日期格式:"+year+"-"+week+"日期时间段是:"+firstday+"-"+lastday);
            startCal.add(Calendar.DAY_OF_YEAR,1);
            String monday = dateFormat1.format(startCal.getTime());
            //System.out.println("下个周一是:"+monday);
            dateWeekProcess(monday,endtime,map);
        }else{
            map.put(year+"-"+week,firstday+"-"+format);
            //System.out.println("日期格式:"+year+"-"+week+"日期时间段是:"+firstday+"-"+format);
        }
    }

    /**
     * 将时间段拆分成不同的月份
     * @param starttime
     * @param endtime
     * @param dateMap
     */
    public static void dateMonthProcess(String starttime, String endtime,
                                        Map<String, String> dateMap){
        DateFormat dateFormat1 = new SimpleDateFormat("yyyy-MM-dd");
        DateFormat dateFormat2 = new SimpleDateFormat("yyyy年MM月");
        Date startdata= null;
        Date enddata= null;
        long time1 = 0;
        long time2 = 0;
        try {
            startdata = dateFormat1.parse(starttime);
            enddata = dateFormat1.parse(endtime);

        } catch (ParseException e) {
            e.printStackTrace();
        }
        //开始日期
        Calendar startCal = Calendar.getInstance();
        startCal.setTime(startdata);
        String format1 = dateFormat2.format(startCal.getTime());
        int startyear = startCal.get(Calendar.YEAR);//开始时间的年份
        int startmonth = startCal.get(Calendar.MONTH)+1;//开始时间的月份
        startCal.add(Calendar.MONTH,1);//下一个月份
        startCal.set(Calendar.DAY_OF_MONTH,1);
        //将日期转换成
        try {
            time1= dateFormat1.parse(dateFormat1.format(startCal.getTime())).getTime();
        } catch (ParseException e) {
            e.printStackTrace();
        }
        //System.out.println(format1);
        //结束日期
        Calendar endCal = Calendar.getInstance();
        endCal.setTime(enddata);
        endCal.set(Calendar.DAY_OF_MONTH,1);
        try {
            time2= dateFormat1.parse(dateFormat1.format(endCal.getTime())).getTime();
        } catch (ParseException e) {
            e.printStackTrace();
        }
        dateMap.put(startyear+"-"+startmonth,format1);
        if(time1<=time2){//判断时间年度和日期的大小
            //System.out.println(startyear+"-"+startmonth+format1);
            String format2 = dateFormat1.format(startCal.getTime());
            dateMonthProcess(format2,endtime,dateMap);
        }
    }


    /**
     * 将时间段拆分成不同的季度
     * @param starttime
     * @param endtime
     * @param dateMap
     */
    public static void dateSeasonProcess(String starttime, String endtime,
                                        Map<String, String> dateMap){
        DateFormat dateFormat1 = new SimpleDateFormat("yyyy-MM-dd");
        Date startdata= null;
        Date enddata= null;
        long time1 = 0;
        long time2 = 0;
        try {
            startdata = dateFormat1.parse(starttime);
            enddata = dateFormat1.parse(endtime);

        } catch (ParseException e) {
            e.printStackTrace();
        }
        //开始日期
        Calendar startCal = Calendar.getInstance();
        startCal.setTime(startdata);

        int startyear = startCal.get(Calendar.YEAR);//开始时间的年份
        int startSeason = getSeason(startdata);//开始时间所属季度
        startCal.add(Calendar.MONTH,3);//获取下一个季度
        startCal.set(Calendar.DAY_OF_MONTH,1);
        try {
            time1= dateFormat1.parse(dateFormat1.format(startCal.getTime())).getTime();
        } catch (ParseException e) {
            e.printStackTrace();
        }
        //System.out.println(format1);
        //结束日期
        Calendar endCal = Calendar.getInstance();
        endCal.setTime(enddata);
        endCal.set(Calendar.DAY_OF_MONTH,1);
        try {
            time2= dateFormat1.parse(dateFormat1.format(endCal.getTime())).getTime();
        } catch (ParseException e) {
            e.printStackTrace();
        }

        dateMap.put(startyear+"-"+startSeason,startyear+"年第"+startSeason+"季度");

        if(time1<=time2){//判断时间年度和日期的大小

            //System.out.println(startyear+"-"+startmonth+format1);
            String format2 = dateFormat1.format(startCal.getTime());
            dateSeasonProcess(format2,endtime,dateMap);
        }
    }

    /**
     * 获取季度
     * @param date
     * @return 季度
     */
    public static int getSeason(Date date) {

        int season = 0;
        Calendar c = Calendar.getInstance();
        c.setTime(date);
        int month = c.get(Calendar.MONTH);
        switch (month) {
            case Calendar.JANUARY:
            case Calendar.FEBRUARY:
            case Calendar.MARCH:
                season = 1;
                break;
            case Calendar.APRIL:
            case Calendar.MAY:
            case Calendar.JUNE:
                season = 2;
                break;
            case Calendar.JULY:
            case Calendar.AUGUST:
            case Calendar.SEPTEMBER:
                season = 3;
                break;
            case Calendar.OCTOBER:
            case Calendar.NOVEMBER:
            case Calendar.DECEMBER:
                season = 4;
                break;
            default:
                break;
        }
        return season;
    }


}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值