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 #?

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.


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

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

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;

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.


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

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

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

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

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);
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.