c timespan string format

Просто любопытно, есть ли строка формата, которую я могу использовать для вывода чего-то вроде «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 :

Понравилась статья? Поделиться с друзьями:
Vkontakte.INFO
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: