TimeSpan ToString "[д.] Чч: мм"

Я пытаюсь отформатировать TimeSpan в строку. Затем я получаю срок действия от MSDN, чтобы сгенерировать свой собственный формат строки. Но это не слова. Возвращает "FormatException".

Зачем? Я не понимаю...

var ts = new TimeSpan(0, 3, 25, 0);
var myString = ts.ToString("[d'.']hh':'mm");

2 ответа

Решение

Я так понимаю, вы пытаетесь сделать что-то вроде необязательной части дня и доли секунды c стандартный формат. Насколько я могу судить, это не возможно напрямую с пользовательскими строками формата. TimeSpan FormatString с дополнительными часами - это тот же вопрос, что и у вас, и я бы предложил что-то похожее на их решение: предложите метод расширения, который создаст для вас строку формата.

public static string ToMyFormat(this TimeSpan ts)
{
    string format = ts.Days >= 1 ? "d'.'hh':'mm" : "hh':'mm";
    return ts.ToString(format);
}

Тогда использовать это:

var myString = ts.ToMyFormat();

Эта ошибка обычно возникает, когда вы используете символы, которые имеют определенные значения в строке формата. Лучший способ отладить это выборочно удалять символы, пока он не заработает. Последний персонаж, которого вы удалили, был проблемным.

В этом случае, глядя на пользовательские строки формата TimeSpan, проблема заключается в квадратных скобках. Escape их с "\", например:

var ts = new TimeSpan(0, 3, 25, 0);
var myString = ts.ToString("\\[d'.'\\]hh':'mm");

[Редактировать: Добавлено]

На пользовательской странице строк формата TimeSpan нет способа пропустить текст, если значения равны 0. В этом случае рассмотрим if заявление или ?: оператор.

Другие вопросы по тегам