Кратчайший способ отобразить значение TimeSpan как истекшее время, например, 1:45:33 - PullRequest
2 голосов
/ 29 мая 2010

Я бы хотел, чтобы простой способ отображать любой интервал времени как истекшее время без использования циклов или пользовательской логики
например,

hours : minutes : seconds

Я уверен, что должна быть встроенная или отформатированная строка .NET, но я не могу ее найти.

Ответы [ 5 ]

3 голосов
/ 29 мая 2010

Сам вопрос не является дубликатом, но, я полагаю, вам нужен ответ - Пользовательский формат Timespan с String.Format . Чтобы еще больше упростить ваше решение, вы можете обернуть эту функциональность в метод расширения Timespan.

3 голосов
/ 29 мая 2010

Что не так с TimeSpan.ToString()?

РЕДАКТИРОВАТЬ: Вы можете использовать DateTime в качестве промежуточного хранилища форматирования:

TimeSpan a = new TimeSpan(1, 45, 33);
string s = string.Format("{0:H:mm:ss}", new DateTime(a.Ticks));
Console.WriteLine(s);

Не красиво, но работает.

1 голос
/ 29 мая 2010

Вы можете использовать:

TimeSpan t = TimeSpan.FromSeconds(999);
string s = t.ToString("c");  // s = "00:16:39"

Пользовательские форматы см. На этой странице MSDN .

0 голосов
/ 30 октября 2015

Используйте это: .ToString()

В соответствии с MSDN , формат по умолчанию это отображает [-][d.]hh:mm:ss[.fffffff]. Это самый быстрый и простой способ отобразить значение TimeSpan как истекшее время, например 1: 45: 33

Если у вас есть days , доли секунды или отрицательное значение, используйте строку пользовательского формата , как описано 1022 * MSDN *. Это будет выглядеть как .ToString(@"hh\:mm\:ss")

Пример:

TimeSpan elapsed = new TimeSpan(0, 1, 45, 33);
Console.WriteLine(elapsed.ToString());             //outputs: "1:45:33"
Console.WriteLine(elapsed.ToString(@"hh\:mm\:ss"));//outputs: "1:45:33"
0 голосов
/ 29 мая 2010

Вот метод, который я использую для пользовательского форматирования:

TimeSpan Elapsed = TimeSpan.FromSeconds(5025);
string Formatted = String.Format("{0:0}:{1:00}:{2:00}",
    Math.Floor(Elapsed.TotalHours), Elapsed.Minutes, Elapsed.Seconds);
// result: "1:23:45"

Я не знаю, квалифицируется ли это как "без пользовательской логики", но оно совместимо с .NET 3.5 и не включает цикл.

...