计算两次之间有多少分钟


86

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

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

但是最后一行不会编译,因为它说我为Timespan构造函数使用了无效的参数。我已经对如何计算两次之间的分钟数进行了相当多的研究,但是我遇到了一些麻烦。有人可以建议我实现目标的最佳方法吗?

编辑/

现在我的代码如下:

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

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


如果varFinish是字符串,则不能将字符串转换为DateTime。您需要使用DateTime.Parse(...)。即使那样,如果varFinish中没有日期,它也将隐含今天的日期。
吉姆(Jim)

Answers:


160

试试这个

DateTime startTime = varValue
DateTime endTime = varTime

TimeSpan span = endTime.Subtract ( startTime );
Console.WriteLine( "Time Difference (minutes): " + span.TotalMinutes );

编辑:如果您正在尝试'span.Minutes',这将仅返回时间跨度的分钟[0〜59],要返回该间隔中所有分钟的总和,只需使用'span.TotalMinutes'。


2
这是一个很好的答案,但是跨度为0。两次之间的时差大于1小时(即60分钟或更长时间)时,以分钟为单位
Asif Mehmood

6
@MalikAsif。我只是尝试了61分钟,就得到了预期的1小时1分钟。如果跨度恰好是60分钟,那么是的,分钟将为零。您在想TotalMinutes()什么?
吉姆(Jim)

17
不对。span.Minutes返回数字[0..59]。使用span.TotalMinutes替代
斯登彼得罗夫

2
这不应是公认的答案。根据其他评论,它不能正确解决问题。
tjmoore

2
@tjmoore感谢您的反馈,我同意您的看法。我在2012年1月回答了原始问题,之后对问题进行了编辑。我偶尔会对此答案不满意,可能是因为大多数人在提出原始未经编辑的问题5年后才开始阅读答案。
凯恩'18


9

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

public static TimeSpan FromMinutes(double value)

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

var intMinutes = TimeSpan.FromMinutes(varTime); // won't compile

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

TimeSpan varTime = (DateTime)varFinish - (DateTime)varValue; 
double fractionalMinutes = varTime.TotalMinutes;
int wholeMinutes = (int)fractionalMinutes;


1

如果endTime和startTime之间的差大于或等于60分钟,则语句:endTime.Subtract(startTime).Minutes;将始终返回(minutesDifference % 60)。显然,当我们仅谈论分钟(此处不是小时)时,这是不希望的。
如果您想获得total number of minutes(以不同的类型转换),则有以下几种方法:

// Default value that is returned is of type *double* 
double double_minutes = endTime.Subtract(startTime).TotalMinutes; 
int integer_minutes = (int)endTime.Subtract(startTime).TotalMinutes; 
long long_minutes = (long)endTime.Subtract(startTime).TotalMinutes; 
string string_minutes = (string)endTime.Subtract(startTime).TotalMinutes; 
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.