获取两个日期中间的日期(按每月划分)

获取两个日期中间的日期(按每月划分),第1张

最近有一个需求,是和日期相关的。因为日期的API不经常用到,所以在这里记录一下。

需求是,给定两个日期,例如(20210304和20220102),项目中的日期使用的是数字格式,没有格式化。需要得到一个集合(list),list里面有多个map,每个map存放的是每月的起始日期和结束日期。当然第一个map的起始日期为项目的开始日期20210304,最后一个map的结束日期为20220101。

代码如下:

我的想法是,先获取两个日期间隔的月份,然后通过月份获取每月的开始日期和结束日期,最后再对第一个map和最后一个进行处理。

使用的时间类是JDK8的时间API。

import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.time.temporal.TemporalAdjusters;
import java.util.*;

import static java.time.temporal.ChronoUnit.MONTHS;

public class TestDemo {
    public static void main(String[] args) {
        TestDemo testDemo = new TestDemo();
        List> list = testDemo.dateDiff("20210304", "20220102");
        System.out.println(list);
    }

    public List> dateDiff(String data1, String data2) {

        List> list = new ArrayList<>();

        int year1 = Integer.parseInt(data1.substring(0, 4));
        int month1 = Integer.parseInt(data1.substring(4, 6));
        int day1 = Integer.parseInt(data1.substring(6, 8));

        int year2 = Integer.parseInt(data2.substring(0, 4));
        int month2 = Integer.parseInt(data2.substring(4, 6));
        int day2 = Integer.parseInt(data2.substring(6, 8));

        LocalDate localDate1 = LocalDate.of(year1, month1, day1);
        LocalDate localDate2 = LocalDate.of(year2, month2, day2);
        long between;
        //获取两个日期相差的月数
        if (day2 > day1) {
            between = MONTHS.between(localDate1, localDate2);
        } else {
            between = MONTHS.between(localDate1, localDate2) + 1;
        }
        //循环获取每月的第一天和最后一天
        for (int i = 0; i <= between; i++) {
            Map map = new HashMap<>();
            LocalDate localDate = localDate2.minusMonths(i);
            //本月的第一天
            LocalDate startDay = LocalDate.of(localDate.getYear(), localDate.getMonth(), 1);
            //本月的最后一天
            LocalDate lastDay = localDate.with(TemporalAdjusters.lastDayOfMonth());
            map.put("startDay", startDay.format(DateTimeFormatter.ofPattern("yyyyMMdd")));
            map.put("lastDay", lastDay.format(DateTimeFormatter.ofPattern("yyyyMMdd")));
            list.add(map);
        }

        //对起始日期进行处理
        Map map1 = list.get(0);
        map1.put("lastDay", localDate2.format(DateTimeFormatter.ofPattern("yyyyMMdd")));

        Map map2 = list.get(list.size() - 1);
        map2.put("startDay", localDate1.format(DateTimeFormatter.ofPattern("yyyyMMdd")));
        //反转list
        Collections.reverse(list);
        return list;
    }
}

代码有错误,或者有简单的想法,欢迎留言。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/735901.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-27
下一篇 2022-04-27

发表评论

登录后才能评论

评论列表(0条)

保存