2014-10-30 3 views
1

У меня есть файлы исключений, которые я хочу удалить через 14 дней или около того. Но как я могу сравнить дату?Сравнение Datetime

На самом деле это выглядит так, но это не работает.

DateTime date = DateTime.Now; 
DateTime newDate = date.Subtract(TimeSpan.FromDays(date.Day + 14)); 
DirectoryInfo exceptionsDirectory = new DirectoryInfo(pathToSave); 

foreach (FileInfo actualFile in exceptionsDirectory.GetFiles()) 
{ 
    if (actualFile.LastWriteTime.Subtract(TimeSpan.FromDays(date.Day + 14)) == newDay) 
    { 
     try 
     { 
      File.Delete(actualFile.FullName); 
     } 
     catch (Exception ex) 
     { 
      // do .. 
     } 
    } 
} 

ответ

3

использовать что-то вроде этого:

DateTime expirydate = DateTime.Now.Subtract(TimeSpan.FromDays(14)); 

DirectoryInfo exceptionsDirectory = new DirectoryInfo(pathToSave); 

foreach (FileInfo actualFile in exceptionsDirectory.GetFiles()) 
{ 
    if (actualFile.LastWriteTime < expirydate) 
    { 
     try 
     { 
      File.Delete(actualFile.FullName); 
     } 
     catch (Exception ex) 
     { 
      // do .. 
     } 
    } 
} 
+2

Как и с большинством 'DateTime' связанных ответов это было бы лучше, если бы он использовал' 'DateTime.UtcNow' и actualFile.LastWriteTimeUtc'. В этом случае не имеет значения, так как вопрос сказал «14 дней или около того», но если кто-то возьмет этот код и попытается применить его, скажем, к часовым старым файлам, они должны использовать Utc. –

+0

@IanMercer, это не всегда хорошая идея. Во многих ситуациях вы ДОЛЖНЫ полагаться на местные, а не на время UTC. – rufanov

+0

Я не говорил «всегда», я сказал «больше всего». Например: почти каждое многопользовательское приложение, работающее на сервере (WWW, WCF, WebApi, ...), не используется для 'DateTime.Now'. Всякий раз, когда вам нужно рассчитать разницу в два раза, вам нужно использовать Utc. и т. д. И даже если вам нужно работать с местным временем, вам лучше использовать 'DateTimeOffset', а не' DateTime', потому что он фиксирует как Utc, так и текущее смещение. –