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

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

给定两个时间戳:
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);
            }
        }
    }

结果

在这里插入图片描述
month + 1 可以参看这篇文章: https://blog.csdn.net/zooop/article/details/48678241

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值