Montag, Januar 27, 2020

DateTime Differenz in Zeit und Millisekunden

Muss ich die Differenz zweier datetime-millisekundengenau Vergleich der ersten datetime wird weniger als der zweite, es zu stoppen, eine Schleife in den gridviews Ereignis löschen

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

dieser code nicht so funktioniert wie erwartet

  • Ihr code ist auf der Suche für mehr als 2 Sekunden Unterschied in der OK2Delete Funktion. Was genau suchst du statt? Mehr als 0 Millisekunden?
  • Auch benutzen Sie bitte DateTime.UtcNow anstelle von DateTime.Nun. Es macht Ihre app unabhängig von Maschine & Zeitzone.
  • Auch jeder die Mühe gemacht, so brauche ich, um wählen Sie eine Antwort aus, aber es hat nicht ganz funktioniert
InformationsquelleAutor ONYX | 2012-01-10

3 Kommentare

  1. 2

    Verwenden .TotalSeconds… ansonsten eine Zeitspanne von 122 “ TotalSeconds wird 2 Sekunden.

    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;
    }
    • Sie sollten „TotalMilliseconds“ die Frage wollte mal hinunter bis auf die Millisekunde genau.
    • Ich denke, die OP bedeutet für den Vergleich auf „präzise“ auf die Millisekunde genau, nicht der Wert, der verglichen wird… es wird sogar noch genauer als Millisekunden.
    • Dies ist ein code auf asp.net Foren mit dem problem der „löschen“ – Ereignis auslösen zweimal
  2. 1

    (end - start).TotalMilliseconds, wo Anfang und Ende sind DateTime

    Beachten Sie, dass Sie möglicherweise nicht in der Lage zu bekommen Millisekunden-Präzision aus DateTime.Jetzt(). Sehen diese Frage. Sie können eine Stopwatch wenn Sie brauchen, feiner Präzision.

  3. 1

    Wollen Sie so etwas wie dies (mit TotalMilliseconds der Zeitspanne, die das Ergebnis der Subtraktion der zwei datetime-Objekte):

    DateTime dt1 = DateTime.Now;
    DateTime dt2 = DateTime.Now;
    
    Console.WriteLine(dt2.Subtract(dt1).TotalMilliseconds.ToString());

    Für Ihre spezifischen Szenario:

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

    Update

    Basierend auf Kommentare und Kritik des code, das Problem ist nicht im Zusammenhang mit der Zeit Unterschied. Stattdessen ist das problem in der RowDeleting-code. Die folgende Zeile:

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

    sollte geändert werden, um

    if (!Ok2Delete(e.RowIndex)) {
        e.Cancel = true; 
        return;
    }  
    • Habe und soeben die Antwort zu reflektieren.
    • Ich denke, deine Logik kann müssen einige Optimierungen. Jetzt Ihre Logik ist: wenn es keine vorherigen ri in der Sitzung ODER (die gleiche ri ist nicht in der Sitzung ODER (die gleiche ri ist in der Sitzung UND die verstrichene Zeit < 2 Sekunden)). Ist das die Logik, die Sie nach sind?
    • Dies ist ein code auf asp.net Foren mit dem problem der „löschen“ – Ereignis auslösen zweimal
    • Ah, das problem ist, dass wenn es nicht ok ist zu löschen, müssen Sie e.Cancel = True um zu verhindern, dass das löschen (in den RowDeleting-Ereignis). Ich habe aktualisiert die Antwort mit dem, was Sie tun müssen.
    • Ich bin immer das gleiche Ergebnis

Kostenlose Online-Tests