Differenza tra due DateTimes C #?


97

Ho bisogno di una funzione che possa restituire la differenza tra le due date seguenti come 24.

DateTime a = new DateTime(2008, 01, 02, 06, 30, 00);
DateTime b = new DateTime(2008, 01, 03, 06, 30, 00);

Risposte:


186

Puoi fare quanto segue:

TimeSpan duration = b - a;

Ci sono molti metodi incorporati nella classe timespan per fare ciò di cui hai bisogno, cioè

duration.TotalSeconds
duration.TotalMinutes

Maggiori informazioni possono essere trovate qui .


1
TimeSpan span = x.ShiftEndTime.Subtract (x.ShiftStartTime) if (span.TotalHours == 24) {do ...}
abmv

19

Prova quanto segue

double hours = (b-a).TotalHours;

Se desideri solo la differenza oraria escludendo la differenza in giorni, puoi utilizzare quanto segue

int hours = (b-a).Hours;

La differenza tra queste due proprietà si nota principalmente quando la differenza di orario è superiore a 1 giorno. La proprietà Hours riporterà solo la differenza di ora effettiva tra le due date. Quindi, se due date differiscono di 100 anni ma si verificano alla stessa ora nel giorno, le ore restituiranno 0. Ma TotalHours restituirà la differenza tra la quantità totale di ore che si sono verificate tra le due date (876.000 ore in questo caso).

L'altra differenza è che TotalHours restituirà ore frazionarie. Questo può o non può essere quello che vuoi. In caso contrario, Math.Round può regolarlo a tuo piacimento.


Ancora sbagliato. TotalHours è un doppio, che restituisce ore intere e frazionarie.
Vilx

È la risposta giusta per la domanda, vuole che il risultato sia 24 come sarebbe. Ovviamente potrebbe arrotondare il TotalHours da solo abbastanza facilmente se è quello che vuole.
James Avery,

@ James la mia risposta produce esattamente 24. L'OP non ha specificato che il valore doveva essere un particolare formato numerico.
JaredPar

1
@abmv: "OP" - Poster originale. In questo caso, tu.
Cerebrus

@ Jared, so che ero d'accordo con te. Penso che la tua risposta sia la risposta migliore di quella prescelta.
James Avery,



1
int hours = (int)Math.Round((b - a).TotalHours)

-1

La differenza di orario in b / n con l'ora verrà mostrata utilizzando questo metodo.

 private void HoursCalculator()
    {
        var t1 = txtfromtime.Text.Trim();
        var t2 = txttotime.Text.Trim();
        var Fromtime = t1.Substring(6);
        var Totime = t2.Substring(6);
        if (Fromtime == "M")
        {
             Fromtime = t1.Substring(5);
        }
        if (Totime == "M")
        {
            Totime = t2.Substring(5);
        }

        if (Fromtime=="PM" && Totime=="AM" )
        {
            var dt1 = DateTime.Parse("1900-01-01 " + txtfromtime.Text.Trim());
            var dt2 = DateTime.Parse("1900-01-02 " + txttotime.Text.Trim());
            var t = dt1.Subtract(dt2);
            //int temp = Convert.ToInt32(t.Hours);
            //temp = temp / 2;
            lblHours.Text =t.Hours.ToString() + ":" + t.Minutes.ToString();

        }
        else if (Fromtime == "AM" && Totime == "PM")
        {
            var dt1 = DateTime.Parse("1900-01-01 " + txtfromtime.Text.Trim());
            var dt2 = DateTime.Parse("1900-01-01 " + txttotime.Text.Trim());
            TimeSpan t = (dt2.Subtract(dt1));
            lblHours.Text = t.Hours.ToString() + ":" + t.Minutes.ToString();
        }
        else
        {
            var dt1 = DateTime.Parse("1900-01-01 " + txtfromtime.Text.Trim());
            var dt2 = DateTime.Parse("1900-01-01 " + txttotime.Text.Trim());
            TimeSpan t = (dt2.Subtract(dt1));
            lblHours.Text = t.Hours.ToString() + ":" + t.Minutes.ToString();
        }
    }

usa gli ID del tuo campo

var t1 acquisisce un valore di 4:00 AM

controllare questo codice può essere utile a qualcuno.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.