java根据某字段获取上周,本周,本月,本季度,本年,总数据的通用方法

根据某字段获取上周,本周,本月,本季度,本年,总数据的通用方法
注:
具体使用

  List<BasicInfo> lastWeekScope = lastWeekScope(basicInfoList, "createTime", BasicInfo.class);
    List<BasicInfo> thisWeekScope = thisWeekScope(basicInfoList, "createTime", BasicInfo.class);
    List<BasicInfo> thisMonthScope = thisMonthScope(basicInfoList, "createTime",BasicInfo.class);
    List<BasicInfo> thisYearScope = thisYearScope(basicInfoList, "createTime",BasicInfo.class);
    List<BasicInfo> totalScope = totalScope(basicInfoList, "createTime", BasicInfo.class);

通用方法具体实现

/**
     * 上周
     * @param basicInfoStream 需要处理的列表数据
     * @param restrict 限制条件
     * @return
     */
    protected <T> List<T> lastWeekScope(Object basicInfoStream, String restrict, Class<T> clazz){
        DateRange lastWeek = DateUtils.getLastWeek();
        JSONConfig jsonConfig = JSONConfig.create();
        jsonConfig.setDateFormat("yyyy-MM-dd HH:mm:ss");
        String toJsonStr = JSONUtil.toJsonStr(basicInfoStream,jsonConfig);
        JSONArray jsonArray = JSONUtil.parseArray(toJsonStr);
        jsonArray.sort(Comparator.comparing(obj -> ((JSONObject) obj).getDate(restrict)).reversed());
        List<Object> objectList = jsonArray.stream().filter(obj -> {
            JSONObject object = (JSONObject) obj;
            Date date = object.getDate(restrict);
            if (date.after(lastWeek.getStart()) && date.before(lastWeek.getEnd())) return true;
            return false;
        }).collect(Collectors.toList());
        return objectList.stream()
                .map(entity -> JSONUtil.toBean(JSONUtil.parseObj(entity), clazz))
                .collect(Collectors.toList());
    }
    /**
     * 本周
     */
    protected <T> List<T> thisWeekScope(Object basicInfoStream, String restrict, Class<T> clazz){
        DateRange thisWeek = DateUtils.getThisWeek();
        JSONConfig jsonConfig = JSONConfig.create();
        jsonConfig.setDateFormat("yyyy-MM-dd HH:mm:ss");
        String toJsonStr = JSONUtil.toJsonStr(basicInfoStream,jsonConfig);
        JSONArray jsonArray = JSONUtil.parseArray(toJsonStr);
        jsonArray.sort(Comparator.comparing(obj -> ((JSONObject) obj).getDate(restrict)).reversed());
        List<Object> objectList = jsonArray.stream().filter(obj -> {
            JSONObject object = (JSONObject) obj;
            Date date = object.getDate(restrict);
            if (date.after(thisWeek.getStart()) && date.before(thisWeek.getEnd())) return true;
            return false;
        }).collect(Collectors.toList());
        return objectList.stream()
                .map(entity -> JSONUtil.toBean(JSONUtil.parseObj(entity), clazz))
                .collect(Collectors.toList());
    }
    /**
     * 本月
     */
    protected <T> List<T> thisMonthScope(Object basicInfoStream, String restrict, Class<T> clazz){
        DateRange thisMonth = DateUtils.getThisMonth();
        JSONConfig jsonConfig = JSONConfig.create();
        jsonConfig.setDateFormat("yyyy-MM-dd HH:mm:ss");
        String toJsonStr = JSONUtil.toJsonStr(basicInfoStream,jsonConfig);
        JSONArray jsonArray = JSONUtil.parseArray(toJsonStr);
        jsonArray.sort(Comparator.comparing(obj -> ((JSONObject) obj).getDate(restrict)).reversed());
        List<Object> objectList = jsonArray.stream().filter(obj -> {
            JSONObject object = (JSONObject) obj;
            Date date = object.getDate(restrict);
            if (date.after(thisMonth.getStart()) && date.before(thisMonth.getEnd())) return true;
            return false;
        }).collect(Collectors.toList());
        return objectList.stream()
                .map(entity -> JSONUtil.toBean(JSONUtil.parseObj(entity), clazz))
                .collect(Collectors.toList());
    }
    /**
     * 本季度
     */
    protected  <T> List<T>  thisQuarterScope(Object basicInfoStream, String restrict, Class<T> clazz){
        DateRange thisQuarter = DateUtils.getThisQuarter();
        JSONConfig jsonConfig = JSONConfig.create();
        jsonConfig.setDateFormat("yyyy-MM-dd HH:mm:ss");
        String toJsonStr = JSONUtil.toJsonStr(basicInfoStream,jsonConfig);
        JSONArray jsonArray = JSONUtil.parseArray(toJsonStr);
        jsonArray.sort(Comparator.comparing(obj -> ((JSONObject) obj).getDate(restrict)).reversed());
        List<Object> objectList = jsonArray.stream().filter(obj -> {
            JSONObject object = (JSONObject) obj;
            Date date = object.getDate(restrict);
            if (date.after(thisQuarter.getStart()) && date.before(thisQuarter.getEnd())) return true;
            return false;
        }).collect(Collectors.toList());
        return objectList.stream()
                .map(entity -> JSONUtil.toBean(JSONUtil.parseObj(entity), clazz))
                .collect(Collectors.toList());
    }

    /**
     * 本年
     */
    protected  <T> List<T>  thisYearScope(Object basicInfoStream, String restrict, Class<T> clazz){
        DateRange thisYear = DateUtils.getThisYear();
        JSONConfig jsonConfig = JSONConfig.create();
        jsonConfig.setDateFormat("yyyy-MM-dd HH:mm:ss");
        String toJsonStr = JSONUtil.toJsonStr(basicInfoStream,jsonConfig);
        JSONArray jsonArray = JSONUtil.parseArray(toJsonStr);
        jsonArray.sort(Comparator.comparing(obj -> ((JSONObject) obj).getDate(restrict)).reversed());
        List<Object> objectList = jsonArray.stream().filter(obj -> {
            JSONObject object = (JSONObject) obj;
            Date date = object.getDate(restrict);
            if (date.after(thisYear.getStart()) && date.before(thisYear.getEnd())) return true;
            return false;
        }).collect(Collectors.toList());
        return objectList.stream()
                .map(entity -> JSONUtil.toBean(JSONUtil.parseObj(entity), clazz))
                .collect(Collectors.toList());
    }
    /**
     * 总
     */
    protected   <T> List<T>   totalScope(Object basicInfoStream, String restrict, Class<T> clazz){
        JSONConfig jsonConfig = JSONConfig.create();
        jsonConfig.setDateFormat("yyyy-MM-dd HH:mm:ss");
        String toJsonStr = JSONUtil.toJsonStr(basicInfoStream,jsonConfig);
        JSONArray jsonArray = JSONUtil.parseArray(toJsonStr);
        jsonArray.sort(Comparator.comparing(obj -> ((JSONObject) obj).getDate(restrict)).reversed());
        List<Object> objectList = jsonArray.stream().collect(Collectors.toList());
        return objectList.stream()
                .map(entity -> JSONUtil.toBean(JSONUtil.parseObj(entity), clazz))
                .collect(Collectors.toList());
    }

获取时间范围通用类
DateUtils.java

 /**
     * 日期格式yyyy-MM-dd
     */
    public static String PATTEN_YMD = "yyyy-MM-dd";
/**
     * 获取当周的时间范围
     * @return
     */
    public static DateRange getThisWeek(){
        Calendar startCalendar = Calendar.getInstance();
        // 设置一个星期的第一天,按中国的习惯一个星期的第一天是星期一
        startCalendar.setFirstDayOfWeek(Calendar.MONDAY);
        // 获得当前日期是一个星期的第几天
        int dayWeek = startCalendar.get(Calendar.DAY_OF_WEEK);
        if(dayWeek==1){
            dayWeek = 8;
        }
        startCalendar.add(Calendar.DATE, startCalendar.getFirstDayOfWeek() - dayWeek);// 根据日历的规则,给当前日期减去星期几与一个星期第一天的差值
        setMinTime(startCalendar);
        Date startCalendarTime = startCalendar.getTime();
        startCalendar.add(Calendar.DATE, 4 + startCalendar.getFirstDayOfWeek());
        setMaxTime(startCalendar);
        return new DateRange(startCalendarTime, startCalendar.getTime());
    }
    /**
     * 获取上周的时间范围
     * @return
     */
    public static DateRange getLastWeek(){
        String beginDayOfLastWeek = getFromToDate(sdf, new Date(), 1, 0, 1);
        Date lastDate = string2Date(beginDayOfLastWeek, PATTEN_YMD);
        Calendar startCalendar = Calendar.getInstance();
        startCalendar.setTime(lastDate);
        // 设置一个星期的第一天,按中国的习惯一个星期的第一天是星期一
        startCalendar.setFirstDayOfWeek(Calendar.MONDAY);
        // 获得当前日期是一个星期的第几天
        int dayWeek = startCalendar.get(Calendar.DAY_OF_WEEK);
        if(dayWeek==1){
            dayWeek = 8;
        }
        startCalendar.add(Calendar.DATE, startCalendar.getFirstDayOfWeek() - dayWeek);// 根据日历的规则,给当前日期减去星期几与一个星期第一天的差值
        setMinTime(startCalendar);
        Date startCalendarTime = startCalendar.getTime();
        startCalendar.add(Calendar.DATE, 4 + startCalendar.getFirstDayOfWeek());
        setMaxTime(startCalendar);
        return new DateRange(startCalendarTime, startCalendar.getTime());
    }

    /**
     * 获取当前月份的时间范围
     * @return
     */
    public static DateRange getThisMonth(){
        Calendar startCalendar = Calendar.getInstance();
        startCalendar.set(Calendar.DAY_OF_MONTH, 1);
        setMinTime(startCalendar);

        Calendar endCalendar = Calendar.getInstance();
        endCalendar.set(Calendar.DAY_OF_MONTH, endCalendar.getActualMaximum(Calendar.DAY_OF_MONTH));
        setMaxTime(endCalendar);

        return new DateRange(startCalendar.getTime(), endCalendar.getTime());
    }

    /**
     * 获取当前季度的时间范围
     * @return current quarter
     */
    public static DateRange getThisQuarter() {
        Calendar startCalendar = Calendar.getInstance();
        startCalendar.set(Calendar.MONTH, ((int) startCalendar.get(Calendar.MONTH) / 3) * 3);
        startCalendar.set(Calendar.DAY_OF_MONTH, 1);
        setMinTime(startCalendar);

        Calendar endCalendar = Calendar.getInstance();
        endCalendar.set(Calendar.MONTH, ((int) startCalendar.get(Calendar.MONTH) / 3) * 3 + 2);
        endCalendar.set(Calendar.DAY_OF_MONTH, endCalendar.getActualMaximum(Calendar.DAY_OF_MONTH));
        setMaxTime(endCalendar);

        return new DateRange(startCalendar.getTime(), endCalendar.getTime());
    }
    /**
     * 获取当前年的时间范围
     * @return current year
     */
    public static DateRange getThisYear() {
        Calendar startCalendar = Calendar.getInstance();
        startCalendar.set(Calendar.DAY_OF_YEAR, 1);
        setMinTime(startCalendar);

        Calendar endCalendar = Calendar.getInstance();
        endCalendar.set(Calendar.DAY_OF_YEAR, endCalendar.getActualMaximum(Calendar.DAY_OF_YEAR));
        setMaxTime(endCalendar);

        return new DateRange(startCalendar.getTime(), endCalendar.getTime());
    }

    /**
     * 获取上年的时间范围
     * @return
     */
    public static DateRange getLastYear(){
        Calendar startCalendar = Calendar.getInstance();
        startCalendar.add(Calendar.YEAR, -1);
        startCalendar.set(Calendar.DAY_OF_YEAR, 1);
        setMinTime(startCalendar);

        Calendar endCalendar = Calendar.getInstance();
        endCalendar.add(Calendar.YEAR, -1);
        endCalendar.set(Calendar.DAY_OF_YEAR, endCalendar.getActualMaximum(Calendar.DAY_OF_YEAR));
        setMaxTime(endCalendar);

        return new DateRange(startCalendar.getTime(), endCalendar.getTime());
    }
    /**
     * 获取date的月份的时间范围
     * @param date
     * @return
     */
    public static DateRange getMonthRange(Date date) {
        Calendar startCalendar = Calendar.getInstance();
        startCalendar.setTime(date);
        startCalendar.set(Calendar.DAY_OF_MONTH, 1);
        setMaxTime(startCalendar);

        Calendar endCalendar = Calendar.getInstance();
        endCalendar.setTime(date);
        endCalendar.set(Calendar.DAY_OF_MONTH, endCalendar.getActualMaximum(Calendar.DAY_OF_MONTH));
        setMaxTime(endCalendar);

        return new DateRange(startCalendar.getTime(), endCalendar.getTime());
    }

    /**
     * 获取昨天的时间范围
     * @return
     */
    public static DateRange getYesterdayRange() {
        Calendar startCalendar = Calendar.getInstance();
        startCalendar.add(Calendar.DAY_OF_MONTH, -1);
        setMinTime(startCalendar);

        Calendar endCalendar = Calendar.getInstance();
        endCalendar.add(Calendar.DAY_OF_MONTH, -1);
        setMaxTime(endCalendar);

        return new DateRange(startCalendar.getTime(), endCalendar.getTime());
    }

    /**
     * 获取上个月的时间范围
     * @return
     */
    public static DateRange getLastMonth(){
        Calendar startCalendar = Calendar.getInstance();
        startCalendar.add(Calendar.MONTH, -1);
        startCalendar.set(Calendar.DAY_OF_MONTH, 1);
        setMinTime(startCalendar);

        Calendar endCalendar = Calendar.getInstance();
        endCalendar.add(Calendar.MONTH, -1);
        endCalendar.set(Calendar.DAY_OF_MONTH, endCalendar.getActualMaximum(Calendar.DAY_OF_MONTH));
        setMaxTime(endCalendar);

        return new DateRange(startCalendar.getTime(), endCalendar.getTime());
    }
    
    private static void setMinTime(Calendar calendar){
        calendar.set(Calendar.HOUR_OF_DAY, 0);
        calendar.set(Calendar.MINUTE, 0);
        calendar.set(Calendar.SECOND, 0);
        calendar.set(Calendar.MILLISECOND, 0);
    }

    private static void setMaxTime(Calendar calendar){
        calendar.set(Calendar.HOUR_OF_DAY, calendar.getActualMaximum(Calendar.HOUR_OF_DAY));
        calendar.set(Calendar.MINUTE, calendar.getActualMaximum(Calendar.MINUTE));
        calendar.set(Calendar.SECOND, calendar.getActualMaximum(Calendar.SECOND));
        calendar.set(Calendar.MILLISECOND, calendar.getActualMaximum(Calendar.MILLISECOND));
    }
        /**
     * 根据当前日期获得最近n周的日期区间(不包含本周)
     * @param sdf 日期格式
     * @param date 日期
     * @param n 日期
     * @param option 0为一周开始日期,不为0则为一周结束时间
     * @param k 日期
     */
    public static String getFromToDate(SimpleDateFormat sdf, Date date, Integer n, Integer option, Integer k) {
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        int dayWeek = calendar.get(Calendar.DAY_OF_WEEK);
        if(dayWeek==1) dayWeek = 8;
        int dayOfWeek = dayWeek - 1;
        int offset = 0 == option ? 1 - dayOfWeek : 7 - dayOfWeek;
        int amount = 0 == option ? offset - (n - 1  + k) * 7 : offset - k * 7;
        calendar.add(Calendar.DATE, amount);
        return sdf.format(calendar.getTime());
    }
        public static Date string2Date(String time, String pattern) {
        try {
            return getDateParser(pattern).parse(time);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return null;
    }
        /**
     * 获取SimpleDateFormat
     *
     * @param pattern
     * @return
     */
    private static SimpleDateFormat getDateParser(String pattern) {
        return new SimpleDateFormat(pattern);
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值