在C#中使用TimeSpans计算平均时间

时间:2015-03-25 17:30:51

标签: 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开始有一个未知单词。

我做错了什么?请帮忙。

2 个答案:

答案 0 :(得分:4)

你根本不应该使用DateTime。当您想要准确测量经过的时间时,请使用System.Diagnostics.Stopwatch

我会以DateTime的方式回答您的问题,希望将来对您有所帮助:)您不需要先转换为字符串,然后转换为DateTime。使用

TimeSpan aTimeS = new TimeSpan(average);

这将创建一个具有指定滴答数的新TimeSpan。请注意TimeSpan而不是DateTime的使用。TimeSpan代表一段时间,而DateTime是特定时间点。

答案 1 :(得分:0)

使用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格式不同。你需要逃离冒号。

相关问题