TimeSpan.TryParseExact не работает - программирование
Подтвердить что ты не робот

TimeSpan.TryParseExact не работает

Я пытаюсь извлечь временной интервал из строки, но TryParseExact возвращает false (fail).

Я не вижу, что я делаю неправильно, можете ли вы помочь? Я пробовал 2 версии моей строки в коде, оба не работают.

TimeSpan.TryParseExact("04:00:01","HH:mm:ss",CultureInfo.CurrentCulture, out aTime)

и

TimeSpan.TryParseExact("04:00:01","HH:mm:ss", null, out aTime)

EDIT: оба ответа здесь верны, у меня неправильный формат для моего пользовательского формата timespan - ошибка, которую я сделал, состоит в том, чтобы предположить, что пользовательские форматы DateTime будут работать для TimeSpans, но они этого не делают.

4b9b3361

Ответ 1

Проблема заключается просто в строке формата для TimeSpan, вы указали "HH:mm:ss". Спецификатор HH (верхний регистр) недействителен для периода времени. Вы должны использовать HH. Строки формата действительно чувствительны к регистру.

Идентификатор двоеточия (:) также должен быть экранирован, поэтому используйте "hh\\:mm\\:ss", @"hh\:mm\:ss" или "hh':'mm':'ss". Все три формы будут иметь тот же эффект.

Вы можете просмотреть список допустимых строк пользовательского формата для TimeSpan здесь. и строки стандартного формата для TimeSpan здесь.

В то время как HH действителен для DateTime и DateTimeOffset, где он представляет 24-часовой часовой и нижний регистр hh, представляет собой 12-часовое время, для TimeSpan - компонент часов всегда основан на 24 часах. Вы могли бы подумать, что формат HH был бы выбран для однородности, но nope - it HH.

Ответ 2

Вероятно, следует упомянуть, что вам нужно избежать символа двоеточия.

TryParseExact("04:00:01", "HH\\:mm\\:ss" ...

Ответ 3

Формат строки, который вы передаете, неверен.

var res=TimeSpan.TryParseExact("04:00:01", "g", CultureInfo.CurrentCulture, out aTime);

g- Общий короткий формат и чувствительный к культуре.

Подробнее об этом здесь Стандартные строки формата Timespan