要在Java中实现根据当前时间年月日往前推30天,并从列表 List<DensityCPK>
中取出这一区间内的数据,你可以按照以下步骤进行:
- 获取当前时间并计算30天前的日期。
- 将日期格式化为字符串(假设
analysisCode
是yyyy-MM-dd
格式)。 - 遍历
List<DensityCPK>
,根据analysisCode
字段筛选出符合条件的记录。
下面是一个示例代码:
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Locale;
import java.util.TimeZone;
public class DensityCPKFilter {
public static void main(String[] args) {
// 示例数据
List<DensityCPK> densityDeviceList = new ArrayList<>();
// 假设这里你已经填充了一些数据到 densityDeviceList 中
// 获取当前时间并计算30天前的日期
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd", Locale.US);
dateFormat.setTimeZone(TimeZone.getTimeZone("UTC")); // 根据需要设置时区
Date currentDate = new Date();
Date thirtyDaysAgo = new Date(currentDate.getTime() - 30 * 24 * 60 * 60 * 1000L);
String startDateStr = dateFormat.format(thirtyDaysAgo);
String endDateStr = dateFormat.format(currentDate);
// 筛选数据
List<DensityCPK> filteredList = filterDensityCPKByDate(densityDeviceList, startDateStr, endDateStr);
// 打印结果
for (DensityCPK item : filteredList) {
System.out.println(item);
}
}
public static List<DensityCPK> filterDensityCPKByDate(List<DensityCPK> densityDeviceList, String startDateStr, String endDateStr) {
List<DensityCPK> filteredList = new ArrayList<>();
for (DensityCPK item : densityDeviceList) {
String analysisCode = item.getAnalysisCode();
try {
Date analysisDate = dateFormat.parse(analysisCode);
if (analysisDate.after(dateFormat.parse(startDateStr)) && analysisDate.before(dateFormat.parse(endDateStr)) ||
analysisDate.equals(dateFormat.parse(endDateStr))) { // 包含当天数据
filteredList.add(item);
}
} catch (ParseException e) {
// 处理解析异常,可能是analysisCode格式不正确
e.printStackTrace();
}
}
return filteredList;
}
}
class DensityCPK {
private String analysisCode;
// 其他字段和方法
public String getAnalysisCode() {
return analysisCode;
}
public void setAnalysisCode(String analysisCode) {
this.analysisCode = analysisCode;
}
@Override
public String toString() {
return "DensityCPK{" +
"analysisCode='" + analysisCode + '\'' +
'}';
}
// 其他getter和setter方法
}
说明
- 日期格式化:
SimpleDateFormat
用于格式化当前日期和30天前的日期为yyyy-MM-dd
格式。 - 日期计算:通过
new Date(currentDate.getTime() - 30 * 24 * 60 * 60 * 1000L)
计算30天前的日期。 - 数据筛选:在
filterDensityCPKByDate
方法中,遍历densityDeviceList
,使用SimpleDateFormat
解析analysisCode
字段,并与日期区间进行比较。
注意:
SimpleDateFormat
是不线程安全的,如果在多线程环境中使用,建议使用ThreadLocal<SimpleDateFormat>
或DateTimeFormatter
(Java 8及以上)。- 根据需要调整时区设置。
- 确保
analysisCode
字段的格式与SimpleDateFormat
的模式匹配。