Как показывать минуты и секунды с помощью Stopwatch ()

#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}