Como obtenho a diferença de horário entre dois objetos DateTime usando C #?

159

Como obtenho a diferença de horário entre dois DateTimeobjetos usando C #?

TinTin
fonte

Respostas:

227

O exemplo a seguir demonstra como fazer isso:

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 executado, isso imprime "30", pois há uma diferença de 30 minutos entre a data / hora.

O resultado DateTime.Subtract(DateTime x)é um objeto TimeSpan que fornece outras propriedades úteis.

Daniel Renshaw
fonte
5
Para exibir a diferença, fazer algo como isto: Console.WriteLine((a - b).ToString(@"hh\:mm\:ss")). Veja: Formato TimeSpan personalizado do MSDN
ishmael 5/11/2012
Isso funcionou para mim. Eu só queria quantos segundos leva para o cliente fazer uma chamada REST e obter resposta de volta.
Ziggler
1
Preste atenção ao uso TotalMinutes! (not Minutes) #
Shahar Shokrani
63

Você quer a TimeSpanestrutura:

TimeSpan diff = dateTime1 - dateTime2;

Um objeto TimeSpan representa um intervalo de tempo (duração do tempo ou tempo decorrido) que é medido como um número positivo ou negativo de dias, horas, minutos, segundos e frações de segundo. A estrutura TimeSpan também pode ser usada para representar a hora do dia, mas apenas se a hora não estiver relacionada a uma data específica.

Existem vários métodos para recuperar dias, horas, minutos, segundos e milissegundos dessa estrutura.

Se você está interessado apenas na diferença, então:

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

fornecerá a diferença positiva entre os horários, independentemente do pedido.

Se você acabou de obter o componente de horário, mas os horários podem ser divididos pela meia-noite, é necessário adicionar 24 horas ao intervalo para obter a diferença real:

TimeSpan diff = dateTime1 - dateTime2;
if (diff < 0)
{
    diff = diff + TimeSpan.FromDays(1);
}
ChrisF
fonte
oi, se datetime2 for 09:00 e dateTime1 for 18:00, o diff será 09 horas 00 min. então qual é a equação para datetime2 é 21:00 e dateTime1 é 03:00, então a diferença está negativa e errada. Como resolver isso?
Pranesh Janarthanan
@Pranesh - se os objetos contiverem uma data, não deverá haver um problema. Se eles não contiverem um tempo, faça a diferença absoluta ou adicione 24 horas ao intervalo de tempo para obter uma diferença positiva. O que está correto dependerá do seu aplicativo.
ChrisF
Sim, eu já removi esses comentários! você pode me mostrar um exemplo de código para sua explicação?
Pranesh Janarthanan
30

O que você precisa é usar o método Subtract das classes DateTime , que retorna um 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));
Nate
fonte
10

O jeito que eu costumo fazer isso é subtrair os dois DateTime e isso me dá um TimeSpan que me dirá o diff.

Aqui está um exemplo:

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

SE ambos são valores de data e hora UTC, você pode fazer TimeSpan diff = dateTime1 - dateTime2;

Caso contrário, sua chance de obter a resposta correta em todos os casos possíveis é zero.

Ian Mercer
fonte
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);
Mukund
fonte
2

Você precisa usar um TimeSpan . Aqui está um código de exemplo:

TimeSpan sincelast = TimeSpan.FromTicks(DateTime.Now.Ticks - LastUpdate.Ticks);
Jason Webb
fonte
2
Ou apenasTimeSpan 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());
}
Wong Lok Pan
fonte
2

Você pode usar da seguinte maneira para obter a diferença entre dois Objetos do Datetime. Suponha que haja objetos DateTime dt1 e dt2 e o código.

TimeSpan diff = dt2.Subtract(dt1);
Sunny Sandeep
fonte