两个DateTimes C#之间的区别?


97

我需要一个函数,它可以返回以下两个日期之间的差值为24。

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

Answers:


185

您可以执行以下操作:

TimeSpan duration = b - a;

在timepan类中,有很多内置方法可以满足您的需求,即

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的操作。
詹姆斯·艾弗里

@詹姆斯我的答案恰好产生24。OP未指定该值必须为特定的数字格式。
JaredPar

1
@abmv:“ OP”-原始海报。在这种情况下,您。
Cerebrus

@Jared,我知道我同意你的看法。我认为您的答案是比所选答案更好的答案。
詹姆斯·艾弗里




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

使用您的字段ID

var t1捕获值为4:00 AM

检查此代码可能对某人有用。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.