2014-10-30 254 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