Come posso ottenere la differenza oraria tra due oggetti DateTime usando C #?


159

Come posso ottenere la differenza di tempo tra due DateTimeoggetti usando C #?

Risposte:


227

L'esempio seguente mostra come eseguire questa operazione:

DateTime a = new DateTime(2010, 05, 12, 13, 15, 00);
DateTime b = new DateTime(2010, 05, 12, 13, 45, 00);
Console.WriteLine(b.Subtract(a).TotalMinutes);

Quando eseguito, questo stampa "30" poiché esiste una differenza di 30 minuti tra data / ora.

Il risultato di DateTime.Subtract(DateTime x)è un oggetto TimeSpan che fornisce altre proprietà utili.


5
Per visualizzare la differenza, fare qualcosa del genere: Console.WriteLine((a - b).ToString(@"hh\:mm\:ss")). Vedi: Formato personalizzato TimeSpan MSDN
ishmael,

Questo ha funzionato per me. Volevo solo quanti secondi sono necessari al client per effettuare una chiamata REST e ottenere una risposta.
Ziggler,

1
Presta attenzione all'uso TotalMinutes! (non Minutes)
Shahar Shokrani

64

Vuoi la TimeSpanstruttura:

TimeSpan diff = dateTime1 - dateTime2;

Un oggetto TimeSpan rappresenta un intervallo di tempo (durata del tempo o tempo trascorso) misurato come numero positivo o negativo di giorni, ore, minuti, secondi e frazioni di secondo. La struttura TimeSpan può anche essere utilizzata per rappresentare l'ora del giorno, ma solo se l'ora non è correlata a una data particolare.

Esistono vari metodi per recuperare giorni, ore, minuti, secondi e millisecondi da questa struttura.

Se sei solo interessato alla differenza, allora:

TimeSpan diff = Math.Abs(dateTime1 - dateTime2);

ti darà la differenza positiva tra i tempi indipendentemente dall'ordine.

Se hai appena ottenuto la componente temporale ma i tempi potrebbero essere divisi entro la mezzanotte, devi aggiungere 24 ore allo span per ottenere la differenza effettiva:

TimeSpan diff = dateTime1 - dateTime2;
if (diff < 0)
{
    diff = diff + TimeSpan.FromDays(1);
}

ciao, se datetime2 è 09:00 e dateTime1 è 18:00, allora diff è 09Hours 00 min. allora qual è l'equazione per datetime2 è 21:00 e dateTime1 è 03:00 quindi la differenza è negativa e sbagliata. Come risolverlo?
Pranesh Janarthanan,

@Pranesh - se gli oggetti contengono una data, non dovrebbero esserci problemi. Se non contengono un tempo, prendi la differenza assoluta o aggiungi 24 ore al periodo di tempo per dare una differenza positiva. Che è corretto dipenderà dalla tua applicazione.
ChrisF

Sì, ho già rimosso quei commenti! puoi mostrarmi un esempio di codice per la tua spiegazione?
Pranesh Janarthanan,

30

Ciò di cui hai bisogno è usare il metodo Subtract delle classi DateTime , che restituisce un TimeSpan .

var dateOne = DateTime.Now;
var dateTwo = DateTime.Now.AddMinutes(-5);
var diff = dateTwo.Subtract(dateOne);
var res = String.Format("{0}:{1}:{2}", diff.Hours,diff.Minutes,diff.Seconds));

10

Il modo in cui lo faccio di solito è sottrarre i due DateTime e questo mi dà un TimeSpan che mi dirà il diff.

Ecco un esempio:

DateTime start = DateTime.Now;
// Do some work
TimeSpan timeDiff = DateTime.Now - start;
timeDiff.TotalMilliseconds;

4

SE sono entrambi valori di data e ora UTC che puoi fare TimeSpan diff = dateTime1 - dateTime2;

Altrimenti la tua possibilità di ottenere la risposta corretta in ogni singolo caso possibile è zero.


3
 var startDate = new DateTime(2007, 3, 24);

 var endDate = new DateTime(2009, 6, 26);

 var dateDiff = endDate.Subtract(startDate);

 var date = string.Format("{0} years {1} months {2} days", (int)dateDiff.TotalDays / 365, 
 (int)(dateDiff.TotalDays % 365) / 30, (int)(dateDiff.TotalDays % 365) / 30);

 Console.WriteLine(date);

2

Devi usare un TimeSpan . Ecco un po 'di codice di esempio:

TimeSpan sincelast = TimeSpan.FromTicks(DateTime.Now.Ticks - LastUpdate.Ticks);

2
O semplicementeTimeSpan sincelast = DateTime.Now - LastUpdate;
Ben M,

2
private void button1_Click(object sender, EventArgs e)
{
    TimeSpan timespan;
    timespan = dateTimePicker2.Value - dateTimePicker1.Value;
    int timeDifference = timespan.Days;
    MessageBox.Show(timeDifference.ToString());
}

2

È possibile utilizzare nel modo seguente per ottenere la differenza tra due oggetti Datetime. Supponiamo che ci siano oggetti DateTime dt1 e dt2, quindi il codice.

TimeSpan diff = dt2.Subtract(dt1);
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.