2

フォルダー名として日付を含むフォルダーを持つディレクトリ構造があります。

ディレクトリ

過去 2 日間の日付を除くすべてのフォルダーを削除したい。この場合、今日のフォルダーと過去 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

このコードは、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 に答える