Java 8 LocalDate 操作时间

项目需求中有统计分析的需求,需要按照年,季度,月进行筛选统计数据。

java 8提供LocalDate类,方便操作时间。

根据需求,返回年,季,月

 /**
     * 根据时间类型返回起始时间节点
     * 年 返回近三年
     * 季 返回往前推两年季度
     * 月 返回本年十二个月
     * @param dateType
     * @return
     */
    public static List<DateDto> dateResultByType(Integer dateType) {
        List<DateDto> dateDtos = new ArrayList<>();
        switch (dateType){
            //年
            case 1:
                dateDtos = yearDate();
                break;
            //季度
            case 2:
                dateDtos = quarterDate();
                break;
            //月
            case 3:
                dateDtos = monthDate();
                break;
            //默认年
            default:
                dateDtos = yearDate();
                break;
        }
        return dateDtos;
    }
    /**
     * 月(默认取12个月)
     * @return
     */
    private static List<DateDto> monthDate() {
        List<DateDto> dateDtos = new ArrayList<>();
        var formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
        var now = LocalDate.now();
        for (int i=1; i<=12;i++){
            //本月第一天
            var start = now.withDayOfMonth(1);
            //本月最后一天
            var end = now.with(TemporalAdjusters.lastDayOfMonth());
            DateDto dateDto = new DateDto();
            dateDto.setStartTime(start.format(formatter))
                    .setEndTime(end.format(formatter));
            dateDtos.add(dateDto);
            //动态修改月份(往前推一个月)
            now = LocalDate.now().minusMonths(i);
        }
        return dateDtos;
    }

    /**
     * 季度
     * @return
     */
    private static List<DateDto> quarterDate() {
        List<DateDto> dateDtos = new ArrayList<>();
        var formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
        var now = LocalDate.now();
        for (int i = 1;i <= 6;i++){
            var month = ((now.getMonthValue() - 1)) / 3 * 3 + 1;
            var start = now.withMonth(month).withDayOfMonth(1);
            var end = now.with(TemporalAdjusters.lastDayOfMonth());
            DateDto dateDto = new DateDto();
            dateDto.setStartTime(start.format(formatter))
                    .setEndTime(end.format(formatter));
            dateDtos.add(dateDto);
            now = LocalDate.now().minusMonths(3*i);
        }
        return dateDtos;
    }

    /**
     * 年
     * @return
     */
    private static List<DateDto> yearDate() {
        List<DateDto> dateDtos = new ArrayList<>();
        var formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
        var now = LocalDate.now();
        for (int i=1;i<=3;i++){
            var start = now.with(TemporalAdjusters.firstDayOfYear());
            var end = now.with(TemporalAdjusters.lastDayOfYear());
            DateDto dateDto = new DateDto();
            dateDto.setStartTime(start.format(formatter))
                    .setEndTime(end.format(formatter));
            dateDtos.add(dateDto);
            now = LocalDate.now().minusYears(i);
        }
        return dateDtos;
    }

    /**
     * 格式化日期
     * @param time
     * @param type
     * @return
     */
    public static String formatDate(String time,Integer type){
        var date = "";
        switch (type){
            case 1:
                date = LocalDate.parse(time).format(DateTimeFormatter.ofPattern("yyyy年"));
                break;
            case 2:
                int year = LocalDate.parse(time).getYear();
                int month = LocalDate.parse(time).getMonth().getValue();
                if(month>=1 && month<=3){
                    date = year + "年第一季度";
                }else if(month>=4 && month<=6){
                    date = year + "年第二季度";
                }else if(month>=7 && month<=9){
                    date = year + "年第三季度";
                }else if(month>=10 && month<=12){
                    date = year + "年第四季度";
                }
                break;
            case 3:
                date = LocalDate.parse(time).format(DateTimeFormatter.ofPattern("yyyy年MM月"));
                break;
            default:
                date = LocalDate.parse(time).format(DateTimeFormatter.ofPattern("yyyy年"));
                break;
        }
        return date;
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值