C# - 计算时间差(分钟)

14

我有以下代码:

DateTime start = DateTime.Now;
Thread.Sleep(60000);
DateTime end = DateTime.Now;

我想计算开始时间和结束时间之间的分钟差。我应该怎么做? 对于上面的示例,结果应该是'1'。

提前致谢!


结果不能保证为1。它可能是1,也可能更大。Sleep只保证在n毫秒内不会执行任何工作,而不是在n毫秒后恢复工作。如果有时结果不正确,请不要感到惊讶。 - Kenneth K.
你不应该使用 DateTime.Now 来测量代码的性能。请使用 System.Diagnostics.Stopwatch。请阅读.NET开发人员常见的五个夏令时反模式 - Matt Johnson-Pint
4个回答

41
你可以使用 Substract 方法并使用 TotalMinutes
var result = end.Subtract(start).TotalMinutes;
如果您需要去除分数分钟,只需将其转换为 int 类型。
var result = (int)end.Subtract(start).TotalMinutes;

请查看MSDN获取更多信息:SubstractTotalMinutes


谢谢,这比我预想的要容易! - P Sawicki
我想问一下,在这个例子中,var和int有什么区别? - P Sawicki
1
@PSawicki,我会去MSDN查看而不是询问它。 - Rahul
@PSawicki TotalMinutes 是一个 double,所以 var 也应该是 double - René Vogt
1
@PSawicki var信息 - Mighty Badaboom
你也可以使用“-”运算符:result = end - start;,在我看来更易于阅读。 - Chris Dunaway

7
我认为更优雅的做法是使用计时器类(Stopwatch-Class)。
Stopwatch stopWatch = new Stopwatch();
stopWatch.Start();
Thread.Sleep(10000);
stopWatch.Stop();
// Get the elapsed time as a TimeSpan value.
TimeSpan ts = stopWatch.Elapsed;

1
这不仅仅是关于优雅的问题。这是测量经过时间的唯一正确方式。 - Matt Johnson-Pint

3

只需取差值(如果需要,可以四舍五入):

double preciseDifference = (end - start).TotalMinutes;
int differentMinutes = (int)preciseDifference;

1

使用 TimeSpan

它代表一个时间间隔,并且会给出你所需要的差异。

以下是一个例子。

TimeSpan span = end.Subtract ( start );

Console.WriteLine( "Time Difference (minutes): " + span.Minutes );

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