Просто любопытно, есть ли строка формата, которую я могу использовать для вывода чего-то вроде «5h 3m 30s»?
например. (очевидно, неправильно)
(Обратите внимание, что даже пробелы должны быть заключены в кавычки — вот что было не так с моей первой попыткой.)
Я предполагаю, что вы используете .NET 4, конечно — до этого TimeSpan не поддерживал строки нестандартного формата.
РЕДАКТИРОВАТЬ: Как уже отмечалось, это не будет работать после 24 часов. Также обратите внимание, что альтернативы также доступны через Noda Time 🙂
Помните об этом при использовании ответа от Джона Скита с кодом, подобным следующему:
Вы получаете такие результаты:
Часовой формат может максимально показывать 23 часа. Он не будет показывать 27 часов или конвертировать 12 дней в часы, он просто отключит их, как если бы они никогда не существовали.
Один из способов исправить это — создать расширение, которое проверяет продолжительность TimeSpan и создает форматирование, основываясь на том, что интервал времени больше года, дня и т. Д. Или вы могли бы просто всегда показывать дни, потому что они никогда не отрезали:
Заметьте, я новичок в программировании. Это только из наблюдений после того, как мне посчастливилось заметить это после того, как я предположил, что это покажет все часы. Я говорю это, потому что я не знаю, есть ли лучшее решение, например, другой часовой формат, который может отображать бесконечные часы.
Однако я думаю, что этот формат выполняет свои функции. Вы просто должны знать об этом. Таким образом, этот пост. В ответе Джона Скита никогда не указывалось, что этот формат должен отображать только свойство часа в формате типа даты, где количество часов может быть не более 23.
каков рекомендуемый способ форматирования TimeSpan объекты в строку пользовательского формата?
18 ответов:
обратите внимание: этот ответ предназначен для .Net 4.0 и выше. Если вы хотите отформатировать TimeSpan в .Net 3.5 или ниже, пожалуйста, смотрите ответ Йоханнеса.
пользовательские строки формата TimeSpan были введены в .Net 4.0. Вы можете найти полную ссылку на доступные спецификаторы формата в MSDN Пользовательские Строки Формата TimeSpan страница.
вот пример строки формата timespan:
(обновление) и вот пример использования Строковой интерполяции C# 6:
вам нужно экранировать символ «:» с помощью «» (который сам должен быть экранирован, если вы не используете дословную строку).
Это отрывок из MSDN Пользовательские Строки Формата TimeSpan страница объясняет о побеге»: «и».»символы в строке формата:
пользовательские спецификаторы формата TimeSpan не включают символы разделителя-заполнителя, такие как символы это отделяет дни от часов, часы от минут или секунды от долей секунды. Вместо этого эти символы должны быть включены в строку пользовательского формата в виде строковых литералов. Например, «ДД.чч:мм» определяет период (.) как разделитель между днями и часами, и двоеточие (:) как разделитель между часами и минутами.
I have a Timespan that I need to output in a particular format as shown below :-
I’m formatting the TimeSpan like this :-
The Result will look something like this :-
How do I round those seconds to 0 decimal places?

3 Answers 3
Your code works with .NET 4 but not with 3.5 since there was a breaking change on 4, TimeSpan now implements IFormattable (see below).
What you can do on 3.5 or lower is, convert the TimeSpan to DateTime and use ToString :