Я пытаюсь вычислить среднее время, вычитая время окончания по времени начала, а затем разделив разность на счет. В моем случае счет - это продукты, отсканированные. Я хочу вывести результат в строке, используя этот формат "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.
Что я делаю не так? Пожалуйста помоги.
Вы не должны использовать DateTime
вообще. Вместо этого используйте System.Diagnostics.Stopwatch, если вы хотите точно измерить прошедшее время.
В любом случае я отвечу на ваш вопрос с точки зрения DateTime
, надеясь, что это будет полезно для вас в будущем :) Вам не нужно сначала преобразовывать в строку, а затем конвертировать в DateTime. использование
TimeSpan aTimeS = new TimeSpan(average);
Это создаст новый TimeSpan
с указанным количеством тиков. Обратите внимание на использование TimeSpan
а не DateTime
. TimeSpan
представляет собой количество времени, а 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. Вам нужно избегать двоеточий.