如何使用 C # 得到两个 DateTime对象之间的时间差?
DateTime
您需要的是使用 日期时间类 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
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.Subtract(DateTime x)
我通常的做法是减去两个日期时间,这样我就得到了一个时间跨度,它会告诉我这个差异。
这里有一个例子:
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);