2011-03-14 38 views
3

我有兩個日期時間。 我從一個sql服務器獲得一個日期時間,另一個日期是客戶端的日期時間。比較DateTime到數據庫中存儲的日期

這兩個日期時間是相等的,但在我的代碼返回不相等。 爲什麼?

var mngProduct = new ProductManager(); 
var file = mngProduct.GetProductImageData(int.Parse(context.Request["imageId"]), imageSize); 

if (!String.IsNullOrEmpty(context.Request.Headers["If-Modified-Since"])) 
{ 
    System.Globalization.CultureInfo provider = System.Globalization.CultureInfo.InvariantCulture; 
    var lastMod = DateTime.ParseExact(context.Request.Headers["If-Modified-Since"], "r", provider).ToLocalTime(); 
    if (lastMod==file.CreatedOn)//return false always 
    { 
    res.StatusCode = 304; 
    res.StatusDescription = "Not Modified"; 
    return; 
    } 
} 
res.ContentType = file.MimeType; 
res.AddHeader("Content-disposition", "attachment; filename=" + file.FileName); 
res.AddHeader("Content-Length", file.Content.Length.ToString()); 
res.BinaryWrite(file.Content.ToArray()); 
res.Cache.SetCacheability(HttpCacheability.Public); 
res.Cache.SetLastModified(file.CreatedOn); 
+0

是否確定要比較同一時區設置中的日期時間值? – 2011-03-14 15:30:51

回答

4

SQL DateTime當涉及到毫秒時精度較低。我會檢查兩個日期的差異是否小於TimeSpan

if(Math.Abs(date1.Subtract(date2).TotalSeconds)>1) // difference of more than 1 second 
{ 
    ... 
} 
1

您需要使用lastMod.Equals(file.CreatedOn)假設時間實際上等於

1

我會想象他們是不完全一樣的。日期組件可能相等,但可能時間組件不是,或者時間組件可能會以毫秒爲單位關閉,這會導致操作員返回false。

您是否檢查過調試器中的實際值,以確保它們的確是正好一樣?

如果你只在比較實際的日期興趣的話,你可能要考慮的是這樣的:

if(lastMod.Year != file.Year || lastMod.Month!= file.Month || lastMod.Month != file.Month) 
{ 
    .... 
} 

可以使用DateTime結構的其他類似性質的比較只是部分你真正感興趣的

1

你確定2日期時間是一樣的嗎?兩者必須具有相同的毫秒(滴答聲)。

我建議你在這個2之間得到TimeSpan,並測試跨度是小於一秒,一分鐘還是任何你認爲是好的。

如果您只需要比較日期時間的日期部分。比較日期時間的Date屬性。

相關問題