[英]Calculating average time using TimeSpans in C#
我正在尝试通过将开始时间减去结束时间,然后将差值除以一个计数,来计算平均时间。 就我而言,计数是扫描的产品。 我想使用此格式“ HH:mm:ss”将结果输出为字符串。 我一直在玩我的代码,但无法正常工作。
这是我的变量:
private DateTime woStartTime;
private DateTime woEndTime;
private TimeSpan difference;
private long average;
这是开始时间的值
woStartTime = DateTime.Now;
这是我计算平均时间的方法
public void Calculate_Average_Time()
{
try
{
woEndTime = DateTime.Now;
difference = woEndTime - woStartTime;
long dTime = Convert.ToInt64(difference.Ticks);
average = dTime / Scanned;
DateTime aTimeS = Convert.ToDateTime((average / 86400M).ToString("HH:mm:ss", CultureInfo.InvariantCulture));
lblError.Text = aTimeS.ToString(); // display to verify results
}
catch(Exception ex)
{
MessageBox.Show(ex.ToString());
}
}
我不断收到异常错误:字符串未被识别为有效的DateTime。 从索引0开始有一个未知单词。
我究竟做错了什么? 请帮忙。
您根本不应该使用DateTime
。 如果要精确测量经过时间,请使用System.Diagnostics.Stopwatch 。
无论如何,我都会用DateTime
回答您的问题,希望将来对您有所帮助:)您不需要先转换为字符串,然后再转换为DateTime。 采用
TimeSpan aTimeS = new TimeSpan(average);
这将创建一个具有指定刻度数的新TimeSpan
。 注意使用TimeSpan
而不是DateTime
。 TimeSpan
代表时间量,而DateTime
是特定时间点。
使用DateTime不是正确的方法。 您将刻度线作为平均值,可能与DateTime不对应。 改用TimeSpan,如下所示:
try
{
woEndTime = DateTime.Now;
difference = woEndTime - woStartTime;
long dTime = Convert.ToInt64(difference.Ticks);
average = dTime / Scanned;
TimeSpan averageTimeSpan = new TimeSpan(average);
lblError.Text = averageTimeSpan.ToString(@"hh\:mm\:ss"); // display to verify results
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
注意:TimeSpan的格式与DateTime格式不同。 您需要逃脱冒号。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.