Sự khác biệt giữa hai DateTimes C #?


97

Tôi cần một hàm có thể trả về sự khác biệt giữa hai ngày dưới đây là 24.

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

Câu trả lời:


185

Bạn có thể làm như sau:

TimeSpan duration = b - a;

Có rất nhiều phương thức tích hợp sẵn trong lớp timespan để làm những gì bạn cần, tức là

duration.TotalSeconds
duration.TotalMinutes

Thông tin thêm có thể được tìm thấy ở đây .


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

19

Hãy thử những điều sau đây

double hours = (b-a).TotalHours;

Nếu bạn chỉ muốn chênh lệch giờ không bao gồm chênh lệch ngày, bạn có thể sử dụng cách sau

int hours = (b-a).Hours;

Sự khác biệt giữa hai tài sản này chủ yếu được nhìn thấy khi chênh lệch múi giờ hơn 1 ngày. Thuộc tính Hours sẽ chỉ báo cáo chênh lệch giờ thực tế giữa hai ngày. Vì vậy, nếu hai ngày khác nhau 100 năm nhưng xảy ra vào cùng một thời điểm trong ngày, giờ sẽ trả về 0. Nhưng TotalHours sẽ trả về sự chênh lệch giữa tổng số giờ đã xảy ra giữa hai ngày (trong trường hợp này là 876.000 giờ).

Sự khác biệt khác là TotalHours sẽ trả về số giờ theo phân số. Đây có thể là điều bạn muốn hoặc không. Nếu không, Math.Round có thể điều chỉnh theo ý bạn.


Vẫn sai. TotalHours là một nhân đôi, trả về số giờ toàn bộ và số giờ.
Vilx-

Đó là câu trả lời đúng cho câu hỏi, anh ấy muốn kết quả là 24. Tất nhiên anh ấy có thể tự mình hoàn thành TotalHours khá dễ dàng nếu đó là điều anh ấy muốn.
James Avery

@James câu trả lời của tôi chính xác là 24. OP không chỉ định giá trị phải là một định dạng số cụ thể.
JaredPar

1
@abmv: "OP" - Áp phích gốc. Trong trường hợp này, bạn.
Cerebrus

@Jared, tôi biết tôi đồng ý với bạn. Tôi nghĩ câu trả lời của bạn là câu trả lời tốt hơn câu được chọn.
James Avery

3

Có lẽ bạn đang tìm kiếm:

int Difference = (a-b).Hours;

Thực sự cần phải là int Difference = (ab) .TotalHours;
Pieter Vandenheede



-1

Chênh lệch thời gian b / w với thời gian sẽ được hiển thị bằng cách sử dụng phương pháp này.

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

sử dụng id trường của bạn

var t1 nhận giá trị 4:00 sáng

kiểm tra mã này có thể hữu ích cho ai đó.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.