繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM