Расчет среднего времени с использованием TimeSpans в C #

1

Я пытаюсь вычислить среднее время, вычитая время окончания по времени начала, а затем разделив разность на счет. В моем случае счет - это продукты, отсканированные. Я хочу вывести результат в строке, используя этот формат "HH: mm: ss". Я играл с моим кодом, но я не могу заставить его работать.

Вот мои переменные:

    private DateTime woStartTime;
    private DateTime woEndTime;
    private TimeSpan difference;
    private long average;

Вот значение для Start Time

    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 ответа

4
Лучший ответ

Вы не должны использовать DateTime вообще. Вместо этого используйте System.Diagnostics.Stopwatch, если вы хотите точно измерить прошедшее время.

В любом случае я отвечу на ваш вопрос с точки зрения DateTime, надеясь, что это будет полезно для вас в будущем :) Вам не нужно сначала преобразовывать в строку, а затем конвертировать в DateTime. использование

TimeSpan aTimeS = new TimeSpan(average);

Это создаст новый TimeSpan с указанным количеством тиков. Обратите внимание на использование TimeSpan а не DateTime. TimeSpan представляет собой количество времени, а DateTime - определенный момент времени.

  • 0
    не могли бы вы показать мне пример использования секундомера?
  • 0
    Я не буду размещать это здесь, но вы можете проверить msdn.microsoft.com/en-us/library/… или dotnetperls.com/stopwatch .
Показать ещё 2 комментария
0

Использование 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. Вам нужно избегать двоеточий.

  • 0
    Спасибо за форматирование! :)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню