如何使用 C # 得到两个 DateTime 对象之间的时间差?

如何使用 C # 得到两个 DateTime对象之间的时间差?

358541 次浏览

您需要的是使用 日期时间类 Subtract 方法,该方法返回一个 时间跨度

var dateOne = DateTime.Now;
var dateTwo = DateTime.Now.AddMinutes(-5);
var diff = dateTwo.Subtract(dateOne);
var res = String.Format("{0}:{1}:{2}", diff.Hours,diff.Minutes,diff.Seconds));

你想要 TimeSpan结构:

TimeSpan diff = dateTime1 - dateTime2;

TimeSpan对象表示一个时间间隔(时间的持续时间或经过的时间) ,该时间间隔被度量为天、小时、分钟、秒和秒的分数的正数或负数。TimeSpan结构也可以用来表示一天中的时间,但只有当时间与特定日期无关时才能使用。

有多种方法可以从这个结构返回天、小时、分钟、秒和毫秒。

如果你只是对差异感兴趣,那么:

TimeSpan diff = (dateTime1 - dateTime2)).Duration();

不管顺序如何,都会给出时间间隔的正差。

如果你刚刚得到了时间分量,但是时间可以在午夜前分割,那么你需要在跨度上增加24小时来得到实际的差异:

TimeSpan diff = dateTime1 - dateTime2;
if (diff < 0)
{
diff = diff + TimeSpan.FromDays(1);
}

你需要使用 时间跨度。下面是一些示例代码:

TimeSpan sincelast = TimeSpan.FromTicks(DateTime.Now.Ticks - LastUpdate.Ticks);

下面的示例演示如何做到这一点:

DateTime a = new DateTime(2010, 05, 12, 13, 15, 00);
DateTime b = new DateTime(2010, 05, 12, 13, 45, 00);
Console.WriteLine(b.Subtract(a).TotalMinutes);

当执行此命令时,会打印“30”,因为日期/时间之间有30分钟的差异。

DateTime.Subtract(DateTime x)的结果是一个 TimeSpan 对象,它提供了其他有用的属性。

我通常的做法是减去两个日期时间,这样我就得到了一个时间跨度,它会告诉我这个差异。

这里有一个例子:

DateTime start = DateTime.Now;
// Do some work
TimeSpan timeDiff = DateTime.Now - start;
timeDiff.TotalMilliseconds;

如果它们都是 UTC 日期时间值,则可以执行 TimeSpan diff = dateTime1 - dateTime2;

否则,在每一个可能的情况下,你得到正确答案的机会是零。

private void button1_Click(object sender, EventArgs e)
{
TimeSpan timespan;
timespan = dateTimePicker2.Value - dateTimePicker1.Value;
int timeDifference = timespan.Days;
MessageBox.Show(timeDifference.ToString());
}

可以按以下方式使用以实现两个日期时间对象之间的差异。假设有 DateTime 对象 dt1和 dt2,然后是代码。

TimeSpan diff = dt2.Subtract(dt1);
 var startDate = new DateTime(2007, 3, 24);


var endDate = new DateTime(2009, 6, 26);


var dateDiff = endDate.Subtract(startDate);


var date = string.Format("{0} years {1} months {2} days", (int)dateDiff.TotalDays / 365,
(int)(dateDiff.TotalDays % 365) / 30, (int)(dateDiff.TotalDays % 365) / 30);


Console.WriteLine(date);