2014-10-30 208 views
1

我有一些例外文件,我想在14天左右后删除。但是我怎样才能比较日期时间?比较日期时间

它看起来像这样,但它不起作用。

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。 – 2014-10-30 03:18:26

+0

@IanMercer,这并不总是好主意。在许多情况下,你必须依靠本地而不是UTC时间。 – rufanov 2014-10-30 04:14:26

+0

我没有说“永远”,我说“最”。例如:运行在服务器上的几乎每个多用户应用程序(WWW,WCF,WebApi,...)都没有用于'DateTime.Now'。无论何时需要计算两次之间的差异,都需要使用Utc。等等。即使你确实需要在当地时间工作,你最好使用'DateTimeOffset'而不是'DateTime',因为它同时捕获Utc和当前偏移量。 – 2014-10-30 04:38:16