#c# #stopwatch
#c# #секундомер
Вопрос:
Мне нужно также показывать минуты, на самом деле я использую этот код для отображения секунд, но также нужны минуты
TimeSpan ts = stopwatch.Elapsed;
Console.WriteLine("File Generated: " _writer.getBinaryFileName(filePath, Convert.ToInt32(logSelected)) " in " "{0}.{1:D2}" "seconds",
ts.Seconds,
ts.Milliseconds/10 "n"
);
как я могу сделать?
Комментарии:
1. Консоль. WriteLine(«Сгенерированный файл: » _writer.getBinaryFileName(путь к файлу, преобразовать. ToInt32 (выбран журнал регистрации)) «через: » » {0} минут» » {1} секунд», т.е. минут, т.е.секунд, т.е. миллисекунд / 10 » n»);
2. Пожалуйста, подумайте о том, чтобы принять ответ, который лучше всего подходит для вас, але. Просто чтобы сохранить раздел вопросов без ответов «чистым». Спасибо! 🙂
3. что такое stopwatch?
4. @barlop Stopwatch «Предоставляет набор методов и свойств, которые вы можете использовать для точного измерения прошедшего времени». Смотрите здесь для получения дополнительной информации: learn.microsoft.com/en-us/dotnet/api /…
Ответ №1:
Вы должны использовать:
ts.ToString("mm\:ss\.ff")
это даст вам минуты, секунды и сотые доли секунды в интервале времени.
также взгляните на http://msdn.microsoft.com/en-us/library/ee372287.aspx
ОТРЕДАКТИРОВАНО: ну, если вы хотите, чтобы минуты были вашей самой большой единицей измерения, вы можете сделать следующее:
string.Format("{0}:{1}", Math.Floor(ts.TotalMinutes), ts.ToString("ss\.ff"))
Комментарии:
1. Проблема, однако, в том, что если общий промежуток времени равен 70 минутам, он будет отображаться
10:00.00
.2. Используя интерполяцию строк и спецификатор формата:
$"Total processing time: {Math.Floor(ts.TotalMinutes)}:{ts:ss\.ff}"
Ответ №2:
Промежуток времени.Метод toString() в .NET 4.0 имеет перегрузку, которая позволяет указать формат.
Для отображения минут и секунд:
TimeSpan elapsed = GetElapsedTime(); // however you get the amount of time elapsed
string tsOut = elapsed.ToString(@"m:ss");
Чтобы включить миллисекунды, вы бы написали:
string tsOut = elapsed.ToString(@"m:ss.ff");
Однако обратите внимание, что это не приведет к ожидаемому результату, если общий промежуток времени превышает 60 минут. Отображаемое значение «минуты» будет elapsed.Minutes
, что в основном совпадает с ((int)elapsed.TotalMinutes) % 60)
. Итак, если общее время составило 70 минут, будет показано выше 10:00
.
Если вы хотите достоверно отображать общее количество минут и секунд, вы должны сделать расчеты самостоятельно.
int minutes = (int)elapsed.TotalMinutes;
double fsec = 60 * (elapsed.TotalMinutes - minutes);
int sec = (int)fsec;
int ms = 1000 * (fsec - sec);
string tsOut = String.Format("{0}:{1:D2}.{2}", minutes, sec, ms);
Комментарии:
1. Хорошее решение, но «int ms = 1000 * (fsec — sec);» неверно.
2. @NorbertBoros Объясните свои рассуждения. А еще лучше, напишите небольшую тестовую программу для проверки вашего утверждения и покажите мне результаты.
3. Я полагаю, что это довольно ясно, ошибка CS0266: не удается неявно преобразовать тип ‘double’ в ‘int’. Существует явное преобразование (вам не хватает приведения?).
Ответ №3:
Я закодировал этот способ:
using System.Diagnostics;
...
Stopwatch watch = new Stopwatch();
watch.Start();
// here the complex program.
...
watch.Stop();
TimeSpan timeSpan = watch.Elapsed;
Console.WriteLine("Time: {0}h {1}m {2}s {3}ms", timeSpan.Hours, timeSpan.Minutes, timeSpan.Seconds, timeSpan.Milliseconds);
Комментарии:
1. используйте TimeSpan. Всего часов,
Ответ №4:
// попробуйте
Stopwatch sw = new Stopwatch();
sw.Start();
Thread.Sleep(10382);
sw.Stop();
Console.Write(sw.Elapsed.Duration());
Ответ №5:
Просмотрите документацию для TimeSpan
структуры, возвращаемой stopwatch.Elapsed
. Вам нужно либо свойство Minutes
, либо TotalMinutes
.
Если вы измеряете интервал в 62 минуты, ts.Minutes
вернется 2
, и ts.TotalMinutes
вернется 62
.
Комментарии:
1. Однако нужно быть осторожным. Если общий промежуток времени составляет 62 минуты и 30 секунд,
ts.TotalMinutes
вернется62.5
.
Ответ №6:
TimeTakenOutput.Text = "0" myStopWatch.Elapsed.Minutes.ToString()
":" myStopWatch.Elapsed.Seconds.ToString() "mins";
Ответ №7:
ts.Minutes
Комментарии:
1. для секунд это {0}.{1:D2}, то есть для минут??
2. Вы могли бы использовать
{0}:{1}.{2:D2}