2012-01-10 115 views
1

我需要兩個日期時間精確到毫秒第一比較對象日期時間將是小於第二的區別,它停在GridView的循環刪除事件日期時間的時間差和毫秒

protected void GridView1_RowDeleting(object sender, GridViewDeleteEventArgs e) 
{ 
    if (!Ok2Delete(e.RowIndex)) return;  

    // your logic goes here and the above IF statement 
    // will hopefully guarantee your code to run once. 
} 
private bool Ok2Delete(int ri) // ri is the record index to be deleted 
{ 
    if (Session["ri"] == null || 
     (!((ri == ((int)Session["ri"])) && 
     (DateTime.Now.Subtract((DateTime)Session["ri_time_stamp"]).Seconds < 2)))) 
    { 
     Session["ri"] = ri; 
     Session["ri_time_stamp"] = DateTime.Now; 
     return true; 
    } 
    return false; 
} 

這個代碼不按預期工作

+0

您的代碼在OK2Delete函數中尋找的差異超過了2秒。你到底在找什麼呢?大於0毫秒? – 2012-01-10 04:13:05

+1

也請使用DateTime.UtcNow而不是DateTime.Now。它使您的應用程序獨立於機器和TimeZone。 – 2012-01-10 04:17:56

+0

那麼大家都做出了努力,所以我需要選擇一個答案,但它並沒有工作 – ONYX 2012-01-11 20:39:11

回答

2

使用.TotalSeconds ...否則122 TotalSeconds的TimeSpan將是2秒。

private bool Ok2Delete(int ri) // ri is the record index to be deleted 
{ 
    if (Session["ri"] == null || 
     (!((ri == ((int)Session["ri"])) && 
     (DateTime.Now.Subtract((DateTime)Session["ri_time_stamp"]).TotalSeconds < 2)))) 
    { 
     Session["ri"] = ri; 
     Session["ri_time_stamp"] = DateTime.Now; 
     return true; 
    } 
    return false; 
} 
+0

你應該使用「TotalMilliseconds」作爲問題想要的時間下降到毫秒。 – Sprunth 2012-01-10 04:05:01

+0

@Sprunth,我認爲OP的意思是比較「準確」到毫秒,而不是比較值......它會比毫秒更準確。 – 2012-01-10 04:08:52

+0

這是asp.net論壇上處理刪除事件兩次觸發問題的代碼 – ONYX 2012-01-10 04:11:14

1

你會想這樣的事情(使用的是減去兩個datetime對象的結果,時間跨度的TotalMilliseconds):

DateTime dt1 = DateTime.Now; 
DateTime dt2 = DateTime.Now; 

Console.WriteLine(dt2.Subtract(dt1).TotalMilliseconds.ToString()); 

對於您的具體方案:

DateTime.Now.Subtract((DateTime)Session["ri_time_stamp"]).TotalMilliseconds < 500 

更新

基於代碼的意見和審查,這個問題是不相關的時間差。相反,問題出在RowDeleting代碼中。下面一行:

if (!Ok2Delete(e.RowIndex)) return; 

應改爲

if (!Ok2Delete(e.RowIndex)) { 
    e.Cancel = true; 
    return; 
} 
+0

@KDM:剛剛更新了答案以反映這一點。 – 2012-01-10 04:03:21

+0

我認爲你的邏輯可能需要一些調整。現在你的邏輯是:如果在會話中沒有以前的ri或者(同一個ri不在會話OR中(同一個ri在會話中且經過的時間<2秒))。這是你之後的邏輯嗎? – 2012-01-10 04:08:31

+0

這是asp.net論壇上處理刪除事件觸發兩次的問題的一些代碼 – ONYX 2012-01-10 04:11:07

1

(end - start).TotalMilliseconds,在開始和結束都DateTime

要知道,你可能無法得到精確到毫秒出來的日期時間。現在()。見this question。如果您需要更精確的精度,則可以使用Stopwatch