ความแตกต่างระหว่าง DateTimes C # สองแบบ?


100

ฉันต้องการฟังก์ชันที่สามารถคืนค่าความแตกต่างระหว่างสองวันที่ด้านล่างเป็น 24

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

คำตอบ:


188

คุณสามารถทำสิ่งต่อไปนี้:

TimeSpan duration = b - a;

มีวิธีการในตัวมากมายในคลาสช่วงเวลาที่จะทำในสิ่งที่คุณต้องการเช่น

duration.TotalSeconds
duration.TotalMinutes

ข้อมูลเพิ่มเติมสามารถพบได้ที่นี่


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

19

ลองทำดังต่อไปนี้

double hours = (b-a).TotalHours;

หากคุณต้องการเพียงความแตกต่างของชั่วโมงโดยไม่รวมส่วนต่างของวันคุณสามารถใช้สิ่งต่อไปนี้

int hours = (b-a).Hours;

ความแตกต่างระหว่างคุณสมบัติทั้งสองนี้ส่วนใหญ่จะเห็นเมื่อเวลาต่างกันมากกว่า 1 วัน คุณสมบัติ Hours จะรายงานเฉพาะความแตกต่างของชั่วโมงจริงระหว่างวันที่สองวัน ดังนั้นหากวันที่สองวันแตกต่างกันตาม 100 ปี แต่เกิดขึ้นพร้อมกันในวันนั้นชั่วโมงจะกลับเป็น 0 แต่ TotalHours จะคืนค่าความแตกต่างระหว่างจำนวนชั่วโมงทั้งหมดที่เกิดขึ้นระหว่างวันที่ทั้งสอง (876,000 ชั่วโมงในกรณีนี้)

ความแตกต่างอื่น ๆ คือ TotalHours จะคืนค่าชั่วโมงเศษ นี่อาจใช่หรือไม่ใช่สิ่งที่คุณต้องการ ถ้าไม่เช่นนั้น Math.Round สามารถปรับเปลี่ยนได้ตามที่คุณต้องการ


ยังไงก็ผิด. TotalHours เป็นสองเท่าคืนทั้งชั่วโมงและเศษส่วน
Vilx-

เป็นคำตอบที่ถูกต้องสำหรับคำถามเขาต้องการให้ผลลัพธ์เป็น 24 ซึ่งมันจะเป็น แน่นอนว่าเขาสามารถปัดเศษ TotalHours ได้อย่างง่ายดายหากนั่นคือสิ่งที่เขาต้องการ
James Avery

@ เจมส์คำตอบของฉันผลิตได้ 24 แน่นอน OP ไม่ได้ระบุค่าจะต้องเป็นรูปแบบตัวเลขเฉพาะ
JaredPar

1
@abmv: "OP" - Original Poster. ในกรณีนี้คุณ
Cerebrus

@ จาเร็ดฉันรู้ว่าฉันเห็นด้วยกับคุณ ฉันคิดว่าคำตอบของคุณเป็นคำตอบที่ดีกว่าคำตอบที่เลือก
James Avery




-1

ความแตกต่างของเวลา b / w กับเวลาจะแสดงให้ใช้วิธีนี้

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

ใช้รหัสฟิลด์ของคุณ

var t1จับค่า4:00 น

ตรวจสอบรหัสนี้อาจเป็นประโยชน์กับใครบางคน

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.