DateTime Разница во времени и миллисекундах - PullRequest
1 голос
/ 10 января 2012

Мне нужна разница между двумя датами и временем до миллисекундного сравнения, когда первая дата и время будут меньше второй, чтобы остановить цикл в событии удаления gridviews

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;
}

этот код не 'т работает как положено

Ответы [ 3 ]

2 голосов
/ 10 января 2012

Используйте .TotalSeconds ... в противном случае интервал времени в 122 полных секунды составит 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;
}
1 голос
/ 10 января 2012

(end - start).TotalMilliseconds, где начало и конец DateTime

Имейте в виду, что вы не сможете получить точность в миллисекундах от DateTime.Now ().См. этот вопрос .Вы можете использовать Stopwatch, если вам нужна более высокая точность.

1 голос
/ 10 января 2012

Вы захотите что-то вроде этого (используя TotalMilliseconds TimeSpan, который является результатом вычитания двух объектов datetime):

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;
}  
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...