2012-01-10 114 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