2013-03-27 78 views
2

我需要比較兩個日期,包括秒。我在網上搜索了兩種方法。一個是進口Microsoft.VisualBasic dll。運行相同數據時結果不一樣。我認爲C#應該在不導入VisualBasic的情況下做同樣的事情。有人可以指點我,讓它在C#中工作嗎?比較日期時間得到不同的結果

在此先感謝。

有一個使用Microsoft.VisualBasic程序

if (Math.Abs(DateAndTime.DateDiff(DateInterval.Second, 
    Conversions.ToDate(colFilesFound[RuntimeHelpers.GetObjectValue(rw["file_path"])]), 
    Conversions.ToDate(rw["last_modified_timestamp"]), 
    FirstDayOfWeek.Sunday, FirstWeekOfYear.Jan1)) == 0L) 
{ 
    unchangedFileNum++; 
    Console.WriteLine("unchange"); 
} 
else 
{ 
    modifiedFileNum++; 
    Console.WriteLine("change"); 
} 

沒有使用Visual.dll另一種方法:

DateTime fileLastModifiedDate = Conversions.ToDate(colFilesFound[rw["file_path"]]); 
DateTime dataLastModifiedDate = Conversions.ToDate(rw["last_modified_timestamp"]); 
if (Math.Abs((fileLastModifiedDate - dataLastModifiedDate).TotalSeconds) == 0L) 
{ 
    Console.WriteLine("File Date: " + colFilesFound[rw["file_path"]] + 
      " <> Database Date: " + Conversions.ToString(rw["last_modified_timestamp"])); 
    unchangedFileNum++; 
    Console.WriteLine("unchange"); 
} 
else 
{ 
    modifiedFileNum++; 
    Console.WriteLine("change"); 
} 
+0

什麼是Conversions.ToDate?你沒有給我們任何樣本數據並沒有幫助,你的代碼不必要地使用其他代碼。請發佈簡短但完整的*程序來證明問題。 – 2013-03-27 17:32:08

+0

爲什麼不使用'=='運算符來測試是否相等? – ken2k 2013-03-27 17:32:44

+1

你可以比較'Ticks'還是那個粒度? – Yuck 2013-03-27 17:34:54

回答

3

的正確方法比較.NET DateTime是否使用==操作符或撥打DateTime.Compare()方法:

DateTime fileLastModifiedDate = ...; 
    DateTime dataLastModifiedDate = ...; 

    if (fileLastModifiedDate == dataLastModifiedDate) 
    { 
     ... 
    } 

您需要考慮precission。有時,你不能有足夠的精度來考慮毫秒。在這種情況下,你需要的日期,而無需考慮毫秒比較:

public static bool IsSameDateWithoutMilliseconds(DateTime d1, DateTime d2) 
{ 
    return d1.Subtract(d2).TotalSeconds == 0; 
} 
+0

你正在失去DateTimeKind的信息... – ken2k 2013-03-27 17:41:15

+0

醜。不會'd1.Subtract(d2).TotalSeconds;'更簡單。 – I4V 2013-03-27 17:42:11

+2

爲什麼你需要'Math.Abs​​'? – I4V 2013-03-27 17:50:36

0

你的問題很可能是毫秒,因爲這些很可能不等於你檢查DateTime是否方式。

DateTime fileLastModifiedDate = Conversions.ToDate(colFilesFound[rw["file_path"]]); 
DateTime dataLastModifiedDate = Conversions.ToDate(rw["last_modified_timestamp"]); 

fileLastModifiedDate = fileLastModifiedDate.AddMilliseconds(-fileLastModifiedDate.Millisecond); 
dataLastModifiedDate = dataLastModifiedDate.AddMilliseconds(-dataLastModifiedDate.Millisecond); 

if (DateTime.Compare(fileLastModifiedDate, dataLastModifiedDate) == 0) 
{ 
    // dates are equal 
} 
else 
{ 
    // dates are not equal 
}