我的应用程序中有一个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?
答案 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;