Каков рекомендуемый способ форматирования TimeSpan
объектов в строку с пользовательским форматом?
Обратите внимание: этот ответ предназначен для .Net 4.0 и выше. Если вы хотите отформатировать TimeSpan в .Net 3.5 или ниже, пожалуйста, смотрите ответ JohannesH .
Пользовательские строки формата TimeSpan были введены в .Net 4.0. Вы можете найти полную ссылку на доступные спецификаторы формата на странице строк формата MSDN Custom TimeSpan .
Вот пример строки формата временного интервала:
string.Format("{0:hh\\:mm\\:ss}", myTimeSpan); //example output 15:36:15
( ОБНОВЛЕНИЕ ) и вот пример, использующий интерполяцию строки C # 6:
$"{myTimeSpan:hh\\:mm\\:ss}"; //example output 15:36:15
Вы должны экранировать символ «:» с помощью символа «\» (который сам должен быть экранирован, если вы не используете дословную строку).
В этом отрывке со страницы строк формата MSDN Custom TimeSpan объясняется экранирование символов «:» и «.» символы в строке формата:
Пользовательские спецификаторы формата TimeSpan не включают символы-разделители-заполнители, такие как символы, которые отделяют дни от часов, часы от минут или секунды от дробных секунд. Вместо этого эти символы должны быть включены в строку пользовательского формата в виде строковых литералов. Например, «dd.hh: mm» определяет точку (.) Как разделитель между днями и часами, а двоеточие (:) - как разделитель между часами и минутами.
myTimeSpan = new TimeSpan(15, 35, 54);
оператора выmyTimeSpan .ToString("hh\\mm\\ss");
получите15m35s54
. Я не думаю, что это то, что вы намеревались, так как это будет M после ваших часов и S после ваших минут.$"{myTimeSpan.TotalHours}:{myTimeSpan:mm\\:ss}"
. С точки зрения пользователя, было бы лучше вывести дни, хотя никто не хочет мысленно выяснить, сколько дней в 200+ часов.Для .NET 3.5 и ниже вы можете использовать:
Код взят из ответа Джона Скита на байты
Для .NET 4.0 и выше, см. Ответ DoctaJonez .
источник
Один из способов - создать
DateTime
объект и использовать его для форматирования:Это способ, которым я знаю. Я надеюсь, что кто-то может предложить лучший способ.
источник
Просто. Используйте
TimeSpan.ToString
с c, g или G. Дополнительная информация на MSDNисточник
Я бы пошел с
источник
Это работает для Framework 4
http://msdn.microsoft.com/en-us/library/ee372287.aspx
источник
Лично мне нравится такой подход:
Вы можете сделать это так, как вам нравится, без проблем:
источник
Это потрясающе:
источник
Вы также можете пойти с:
РЕДАКТИРОВАТЬ:
Вы также можете посмотреть на Strings.Format .
источник
Все буквенные символы должны быть экранированы.
источник
Я использовал код ниже. Это длинное, но все же это одно выражение, которое выдает очень дружественный вывод, поскольку не выводит дни, часы, минуты или секунды, если они имеют значение ноль.
В образце выдает результат: «4 дня 1 час 3 секунды».
источник
String timeComponent(int value, String name) { return value > 0 ? value + " " + name + (value > 1 ? "s" : ""); }
Вызовите это для каждого компонента (напримерtimeComponent(sp.Days, "day")
), затем используйтеString.join
для вставки пробелов.Я использую этот метод. Я бельгиец и говорю по-голландски, поэтому множественное число часов и минут - это не просто добавление «к» в конце, а почти другое слово, чем в единственном числе.
Это может показаться длинным, но это очень читабельно, я думаю:
источник
Именно такой подход я использовал для себя с условным форматированием. и я публикую это здесь, потому что я думаю, что это чистый путь.
пример выходов:
Форматирование легко.
time.Days:#0:;;\\
предыдущий формат;;
предназначен для положительного значения. отрицательные значения игнорируются. и для нулевых значений мы имеем;;\\
, чтобы скрыть это в форматированной строке. обратите внимание, что экранированный обратный слеш необходим, иначе он не будет правильно отформатирован.источник
Вот мой метод расширения :
Пример вызова:
Вывод:
источник
Это боль в VS 2010, вот мое обходное решение.
источник
Substring
Метод отлично работает , если вы хотите только часы: минуты: секунды. Это простой, чистый код и легкий для понимания.источник
Вот моя версия. Он показывает только столько, сколько необходимо, обрабатывает плюрализм, негативы, и я попытался сделать его легким.
Примеры вывода
Код
источник
Если вы хотите, чтобы формат продолжительности был похож на YouTube, учитывая количество секунд
Вывод:
источник
Я хотел вернуть строку типа «1 день 2 часа 3 минуты», а также принять во внимание, если, например, дни или минуты равны 0, а затем не отображать их. спасибо Джону Рашу за его ответ, который является лишь продолжением
источник