C#中两个DateTime的区别是什么?

117

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

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

220

你可以按照以下方式操作:

TimeSpan duration = b - a;

TimeSpan类中有许多内置的方法可以满足您的需求,例如:

duration.TotalSeconds
duration.TotalMinutes

更多信息可以在这里找到。


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

24

尝试以下方法

double hours = (b-a).TotalHours;

如果你只想要小时数差异,而不包括天数差异,你可以使用以下代码:

int hours = (b-a).Hours;
这两个属性的区别主要在于时间差超过1天时才会显现。Hours属性仅报告两个日期之间实际的小时差异。因此,如果两个日期相差100年但在同一天发生,Hours将返回0。但是TotalHours将返回两个日期之间发生的总小时数的差异(在这种情况下为876,000小时)。
另一个区别是TotalHours会返回小数小时数。这可能是你想要的,也可能不是。如果不是,请使用Math.Round进行调整。

还是错的。TotalHours 是一个 double 类型,返回整数和小数小时。 - Vilx-
这是问题的正确答案,他想要结果为24,而它确实是。当然,如果他想要的话,他可以很容易地四舍五入TotalHours。 - James Avery
@James 我的答案确切地产生了24。OP没有指定值必须是特定的数字格式。 - JaredPar
1
@abmv:“OP” - 原帖作者。在这种情况下,就是你。 - Cerebrus
@Jared,我知道我同意你的观点。我认为你的回答比选中的回答更好。 - James Avery
@James,抱歉。今天早上只喝了半杯咖啡,还没完全清醒。 :) - JaredPar

3

您或许正在寻找以下内容:

int Difference = (a-b).Hours;

实际上需要的是:int Difference = (a-b).TotalHours; - zurebe-pieter

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

1
var theDiff24 = (b-a).Hours

0

使用此方法可以显示两个时间之间的时间差。

 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进行操作

变量t1存储了一个值为4:00AM

检查这段代码可能对某些人有帮助。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接