Java中使用Calendar获取近30天所有日期并存储到ArrayList的方法
基于你现有Calendar工具类的实现
你现有代码的逻辑已经拿到了左闭右开的时间区间[fromDate, toDate),刚好覆盖过去30天到今日的所有日期,直接循环遍历即可:
import java.util.ArrayList; import java.util.Calendar; import java.util.Date; // 你的原有代码 Calendar cal = Calendar.getInstance(); cal.add(Calendar.DATE, 1); Date toDate = cal.getTime(); cal.add(Calendar.DATE, -30); Date fromDate = cal.getTime(); // 新增遍历逻辑 ArrayList<Date> dateList = new ArrayList<>(); // 用临时Calendar对象操作,避免修改原有的cal变量 Calendar currentCal = Calendar.getInstance(); currentCal.setTime(fromDate); // 只要当前日期早于toDate,就加入列表 while (currentCal.getTime().before(toDate)) { dateList.add(currentCal.getTime()); // 日期向后加1天 currentCal.add(Calendar.DATE, 1); }
上述代码默认生成的日期顺序是从30天前到今日,如果需要反过来从今日到30天前的顺序,调整遍历方向即可。
Java 8及以上版本更优方案(推荐)
旧的Calendar、Date类存在线程安全、API设计不直观的问题,Java 8之后推出的java.time新时间API可以更简洁地实现需求:
import java.time.LocalDate; import java.util.ArrayList; ArrayList<LocalDate> dateList = new ArrayList<>(); LocalDate today = LocalDate.now(); // 按从早到晚的顺序存入30天日期 for (int i = 29; i >= 0; i--) { dateList.add(today.minusDays(i)); }
如果需要Date类型的结果,也可以通过LocalDate和Date的互转逻辑实现。
内容的提问来源于stack exchange,提问作者Cross DEV
相关产品推荐
相关产品推荐

