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, но они этого не делают.
Ответы
Ответ 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