0
点赞
收藏
分享

微信扫一扫

根据当前时间年月日往前推30天并筛选数据

诗尚凝寒 2024-11-22 阅读 6

要在Java中实现根据当前时间年月日往前推30天,并从列表 List<DensityCPK> 中取出这一区间内的数据,你可以按照以下步骤进行:

  1. 获取当前时间并计算30天前的日期。
  2. 将日期格式化为字符串(假设 analysisCode 是 yyyy-MM-dd 格式)。
  3. 遍历 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方法
 
 }

说明

  1. 日期格式化SimpleDateFormat 用于格式化当前日期和30天前的日期为 yyyy-MM-dd 格式。
  2. 日期计算:通过 new Date(currentDate.getTime() - 30 * 24 * 60 * 60 * 1000L) 计算30天前的日期。
  3. 数据筛选:在 filterDensityCPKByDate 方法中,遍历 densityDeviceList,使用 SimpleDateFormat 解析 analysisCode 字段,并与日期区间进行比较。

注意:

  • SimpleDateFormat 是不线程安全的,如果在多线程环境中使用,建议使用 ThreadLocal<SimpleDateFormat> 或 DateTimeFormatter(Java 8及以上)。
  • 根据需要调整时区设置。
  • 确保 analysisCode 字段的格式与 SimpleDateFormat 的模式匹配。
举报

相关推荐

0 条评论