根据开始和结束时间的时间戳,获取中间相隔时间所对应的年月信息

有什么错误请大佬指正,新人没有什么开发经验,轻虐

给定两个时间戳:
start_date: 1530374400 时间: 2018/7/1/
end_date: 1565193600 时间: 2019/8/8

获取两个时间戳中包含的年份和月份
2018-7-1 至 2019-8-8 应该有两个年份 分别对应各自的日期
2018年 —> 7,8,9,10,11,12 月
2019年 —> 1,2,3,4,5,6,7,8 月

代码:

      public void test() {
		// 创建结果集
        HashMap<Integer, List<Integer>> result= new HashMap<>();

        Calendar start = Calendar.getInstance();
        Calendar end = Calendar.getInstance();

        // 时间: 2018/7/1/
        start.setTimeInMillis(1530374400000L);

        // 2019/8/8
        end.setTimeInMillis(1565193600000L);
        // 创建月份集合  最后要放入到result对应year的value中
        ArrayList<Integer> monthList = null;
        // 创建累加calendar 
        Calendar curr = start;
        // 如果curr 在 end 日期之前 返回true 
        while (curr.before(end)) {
        	// 获取年
            int year = curr.get(Calendar.YEAR);
            // 如果在result中不包含这个year的key 则创建 一个新的monthList用来存放month
            if (!result.containsKey(year)) {
                monthList = new ArrayList<>();
                result.put(year, monthList);
            }
            // 将 同一年的 month 放入 monthList中 关于 month+1可以产看下边的链接
            monthList.add(curr.get(Calendar.MONTH) + 1);
            // curr 月份 + 1 
            curr.add(Calendar.MONTH, 1);
            // 如果遍历的下一个年大于当前的年 或者 当前遍历的等于end了 则将monthList放入result中
            if (curr.get(Calendar.YEAR) > year || curr.equals(end)) {
                result.put(year, monthList);
            }
        }
    }

结果

根据开始和结束时间的时间戳,获取中间相隔时间所对应的年月信息_第1张图片
month + 1 可以参看这篇文章: https://blog.csdn.net/zooop/article/details/48678241

你可能感兴趣的:(总结)