You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 09:15:03