2

我有一个目录结构,其中包含日期为文件夹名称的文件夹。

目录

我想删除除最后两天日期以外的所有文件夹。在这种情况下,除了今天的文件夹和最后两天。即 23、22、21。在这里,我无法使用 joda-time 来查找日期之间的差异。

这是我试图实现这一目标的代码。

DateFormat dateFormat=new SimpleDateFormat("yyyy-MM-dd");
    Calendar cal=Calendar.getInstance();
    cal.add(Calendar.DATE, -2);
    //java.util.Date date=new java.util.Date();
    System.out.println("the date is "+dateFormat.format(cal.getTime()));
    String direct="D:\\tempm\\Sample\\"+dateFormat.format(cal.getTime());
    File file=new File(direct);
/*  if(!file.exists())
    {
        file.mkdir();
        System.out.println("folder created");
    }*/
  String path="D:\\tempm\\Sample\\";
    File file2=new File(path);
    for(File fi:file2.listFiles())
    {
        if(!fi.getAbsolutePath().equals(direct))
        {
            System.out.println(fi.getAbsolutePath());
            FileDeleteStrategy.FORCE.delete(fi);
            System.out.println("files except todays date were deleted");
        }
    } 

如何找到这种格式的日期差异?还有如何减去它作为我的案例的路径?任何想法都会更有帮助

谢谢

4

2 回答 2

2

此代码将返回两个日期之间的差异。

/** Using Calendar - THE CORRECT WAY**/  
//assert: startDate must be before endDate  

public static long daysBetween(Calendar startDate, Calendar endDate) {  
  Calendar date = (Calendar) startDate.clone();  
  long daysBetween = 0;  
  while (date.before(endDate)) {  
    date.add(Calendar.DAY_OF_MONTH, 1);  
    daysBetween++;  
  }  
  return daysBetween;  
}  
}  
于 2013-07-23T07:01:11.523 回答
2

这里

Date d1 = null;
Date d2 = null;
    try {
        d1 = Date.getInstance();
        d2 = format.parse(file2.getName());
    } catch (ParseException e) {
        e.printStackTrace();
    }    

    long diff = d2.getTime() - d1.getTime();
    long diffDays = diff / (60 * 60 * 1000 * 24);
    if(diffDays<=-3)
    {
        // Your code of delete
    }

现在您所需要的只是使用文件夹的名称来获取日期,并使用日期的实例作为差异的另一面

于 2013-07-23T07:04:39.637 回答