Diferença entre dois DateTimes C #?


97

Preciso de uma função que possa retornar a diferença entre as duas datas abaixo como 24.

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

Respostas:


185

Você pode fazer o seguinte:

TimeSpan duration = b - a;

Há muitos métodos integrados na classe de intervalo de tempo para fazer o que você precisa, ou seja,

duration.TotalSeconds
duration.TotalMinutes

Mais informações podem ser encontradas aqui .


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

19

Tente o seguinte

double hours = (b-a).TotalHours;

Se você quer apenas a diferença de horas, excluindo a diferença de dias, você pode usar o seguinte

int hours = (b-a).Hours;

A diferença entre essas duas propriedades é vista principalmente quando a diferença de tempo é superior a 1 dia. A propriedade Hours relatará apenas a diferença de hora real entre as duas datas. Portanto, se duas datas diferissem em 100 anos, mas ocorressem no mesmo horário do dia, as horas retornariam 0. Mas TotalHours retornaria a diferença na quantidade total de horas que ocorreram entre as duas datas (876.000 horas neste caso).

A outra diferença é que TotalHours retornará horas fracionárias. Isso pode ou não ser o que você deseja. Caso contrário, o Math.Round pode ajustá-lo ao seu gosto.


Ainda errado. TotalHours é duplo, retornando horas inteiras e fracionárias.
Vilx-

É a resposta certa para a pergunta, ele quer que o resultado seja 24, o que seria. É claro que ele mesmo poderia arredondar o TotalHours com bastante facilidade, se for o que deseja.
James Avery

@James minha resposta produz 24 exatamente. O OP não especifica que o valor deve ser um formato de número específico.
JaredPar

1
@abmv: "OP" - Pôster Original. Nesse caso, você.
Cerebrus

@Jared, eu sei que estava concordando com você. Acho que sua resposta é a melhor resposta do que a escolhida.
James Avery

3

Talvez você esteja procurando por:

int Difference = (a-b).Hours;

Na verdade, precisaria ser int Difference = (ab) .TotalHours;
Pieter Vandenheede,


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

-1

A diferença de tempo entre as horas será mostrada usando este método.

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

use seu ID de campo

var t1 captura um valor de 4h

verificar este código pode ser útil para alguém.

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.