计算两次之间的分钟数

PJW*_*PJW 78 c#

我的应用程序中有一个datagridview,它包含开始和结束时间.我想计算这两次之间的分钟数.到目前为止我有:

var varFinish = tsTable.Rows[intCellRow]["Finish Time"];
TimeSpan varTime = (DateTime)varFinish - (DateTime)varValue;
int intMinutes = TimeSpan.FromMinutes(varTime);
Run Code Online (Sandbox Code Playgroud)

但最后一行不会编译,因为它说我使用Timespan构造函数的无效参数.我已经研究了很多关于如何计算两次之间的分钟数的问题,但是我有点像砖墙.有人可以告诉我实现目标的最佳方法.

编辑/

现在我的代码如下:

var varFinish = tsTable.Rows[intCellRow]["Finish Time"];
TimeSpan varTime = (DateTime)varFinish - (DateTime)varValue;
int intMinutes = (int)varTime.TotalMinutes;
Run Code Online (Sandbox Code Playgroud)

但是我在第二行得到了无效的演员.varFinish和varValue都是时间,例如10:00和8:00.所以不确定为什么他们不会强制转换为DateTime?

Kan*_*ane 138

试试这个

DateTime startTime = varValue
DateTime endTime = varTime

TimeSpan span = endTime.Subtract ( startTime );
Console.WriteLine( "Time Difference (minutes): " + span.TotalMinutes );
Run Code Online (Sandbox Code Playgroud)

  • 不对.`span.Minutes`返回一个数字[0..59].请改用"span.TotalMinutes" (15认同)
  • @MalikAsif.我只是尝试了61分钟,我按照预期得到了1小时1分钟.如果跨度恰好是60分钟,则是,分钟将为零.你在想'TotalMinutes()`吗? (6认同)
  • 这是一个很好的答案,但是在span上给出*0*.当两次之间的差异大于1小时(即60分钟或更长时间)时 (2认同)
  • 这不应该是公认的答案.根据其他评论,它没有正确解决问题. (2认同)
  • @tjmoore感谢您的反馈,我同意您的看法.我在2012年1月回答了原始问题,之后编辑了问题.我偶尔会得到这个答案,可能是因为大多数人在原来未经编辑的问题被问到5年后正在阅读答案. (2认同)

Tim*_*ter 34

double minutes = varTime.TotalMinutes;
int minutesRounded = (int)Math.Round(varTime.TotalMinutes);
Run Code Online (Sandbox Code Playgroud)

TimeSpan.TotalMinutes:此实例表示的总分钟数.

  • 是TotalMinutes是我正在寻找的.非常感谢^ _ ^ (2认同)

Dr.*_*ABT 9

在您的问题代码中,您使用TimeSpan.FromMinutes不正确.请参阅TimeSpan.FromMinutes 的MSDN文档,它提供以下方法签名:

public static TimeSpan FromMinutes(double value)
Run Code Online (Sandbox Code Playgroud)

因此,以下代码将无法编译

var intMinutes = TimeSpan.FromMinutes(varTime); // won't compile
Run Code Online (Sandbox Code Playgroud)

相反,您可以使用TimeSpan.TotalMinutes属性来执行此算法.例如:

TimeSpan varTime = (DateTime)varFinish - (DateTime)varValue; 
double fractionalMinutes = varTime.TotalMinutes;
int wholeMinutes = (int)fractionalMinutes;
Run Code Online (Sandbox Code Playgroud)