Perbedaan antara dua DateTimes C #?

97

Saya membutuhkan fungsi yang dapat mengembalikan perbedaan antara dua tanggal di bawah ini sebagai 24.

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

Jawaban:

186

Anda dapat melakukan hal berikut:

TimeSpan duration = b - a;

Ada banyak metode bawaan di kelas rentang waktu untuk melakukan apa yang Anda butuhkan, yaitu

duration.TotalSeconds
duration.TotalMinutes

Info lebih lanjut dapat ditemukan di sini .

Joey Robert
sumber
1
Rentang TimeSpan = x.ShiftEndTime.Subtract (x.ShiftStartTime) if (span.TotalHours == 24) {do ...}
abmv
19

Coba berikut ini

double hours = (b-a).TotalHours;

Jika Anda hanya ingin perbedaan jam tidak termasuk perbedaan hari, Anda dapat menggunakan yang berikut ini

int hours = (b-a).Hours;

Perbedaan antara kedua properti ini terutama terlihat jika perbedaan waktu lebih dari 1 hari. Properti Jam hanya akan melaporkan perbedaan jam sebenarnya antara kedua tanggal. Jadi jika dua tanggal berbeda dengan 100 tahun tetapi terjadi pada waktu yang sama dalam satu hari, jam akan kembali 0. Tetapi TotalHours akan mengembalikan selisih antara jumlah total jam yang terjadi antara dua tanggal (876.000 jam dalam kasus ini).

Perbedaan lainnya adalah TotalHours akan mengembalikan jam pecahan. Ini mungkin atau mungkin tidak yang Anda inginkan. Jika tidak, Math.Round dapat menyesuaikannya dengan keinginan Anda.

JaredPar
sumber
Masih salah. TotalHours adalah jam ganda, yang menghasilkan jam utuh dan pecahan.
Vilx-
Ini adalah jawaban yang tepat untuk pertanyaan itu, dia ingin hasilnya menjadi 24 seperti yang seharusnya. Tentu saja dia bisa membulatkan TotalHours sendiri dengan mudah jika itu yang dia inginkan.
James Avery
@ James, jawaban saya menghasilkan 24 tepatnya. OP tidak menentukan nilai harus menjadi format angka tertentu.
JaredPar
1
@abmv: "OP" - Poster Asli. Dalam hal ini, Anda.
Cerebrus
@ Jared, saya tahu saya setuju dengan Anda. Saya pikir jawaban Anda adalah jawaban yang lebih baik daripada yang terpilih.
James Avery
3

Apakah Anda mungkin mencari:

int Difference = (a-b).Hours;
Vilx-
sumber
Sebenarnya perlu int Difference = (ab) .TotalHours;
Pieter Vandenheede
1
var theDiff24 = (b-a).Hours
diadiora
sumber
1
int hours = (int)Math.Round((b - a).TotalHours)
Damien
sumber
-1

Perbedaan waktu b / w ke waktu akan ditampilkan menggunakan metode ini.

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

gunakan id bidang Anda

var t1 menangkap nilai 4:00 AM

memeriksa kode ini mungkin bisa membantu seseorang.

Darshan
sumber