计算两次之间的分钟数

时间:2012-01-26 11:29:59

标签: c#

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

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

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

EDIT /

现在我的代码如下:

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?

5 个答案:

答案 0 :(得分:122)

试试这个

DateTime startTime = varValue
DateTime endTime = varTime

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

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

答案 1 :(得分:34)

double minutes = varTime.TotalMinutes;
int minutesRounded = (int)Math.Round(varTime.TotalMinutes);

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

答案 2 :(得分:8)

在您的问题代码中,您错误地使用了TimeSpan.FromMinutes。请参阅MSDN Documentation获取TimeSpan.FromMinutes,它提供以下方法签名:

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;

答案 3 :(得分:3)

您只需要像TotalMinutes

一样查询varTime.TotalMinutes属性

答案 4 :(得分: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;