TimeSpan.ParseExact не распознает формат ввода

Я знаю, что таких вопросов много, но я не могу найти ответ на свой.

У меня есть эта строка кода С#:

var x = TimeSpan.ParseExact("800", "hmm", CultureInfo.InvariantCulture);

И он выдает исключение о том, что формат ввода недействителен. Если поставить "0800" и "чхмм", то работает. Я видел, как люди используют одну букву «h» в TimeSpan-Conversions, поэтому это должно быть возможно. Также нет специальных букв, которые нужно было бы экранировать.

Я попытался использовать CurrentCulture вместо InvariantCulture, но это ничего не изменило. Прямо сейчас я дополняю свои строки, чтобы с левой стороны были 0, но я хотел бы знать, почему не удалось выполнить TimeSpan-Parsing.


person Manuel Hoffmann    schedule 12.08.2014    source источник


Ответы (1)


Я не знаю, почему это так и где это задокументировано, но трехзначные промежутки времени, похоже, не поддерживаются в TimeSpan.ParseExact. Таким образом, вы можете обойти это, дополнив его ведущими нулями:

string ts = "800";
var x = TimeSpan.ParseExact(ts.PadLeft(4, '0'), "hhmm", CultureInfo.InvariantCulture);

Я предполагаю, что причина, по которой TimeSpan не может проанализировать это, связана с причиной, по которой DateTime.ParseExact не может анализировать 7 цифр с месяцем из одной или двух цифр и без разделителя.

person Tim Schmelter    schedule 12.08.2014
comment
@Manuel Hoffmann: Сейчас я дополняю свои строки, чтобы слева были 0 упс, до сих пор я не видел, что это уже ваш обходной путь. Может быть, мое последнее предложение имеет некоторую дополнительную ценность. - person Tim Schmelter; 12.08.2014
comment
Вы правы, я уже делаю это. Какое странное поведение на стороне С#. - person Manuel Hoffmann; 12.08.2014