Как обрабатывать спецификаторы формата в TimeSpan.TryParseExact (...) - PullRequest
0 голосов
/ 17 мая 2019

Я бы хотел проанализировать строку промежутка времени, содержащую спецификаторы формата, в TimeSpan . Например: "2h 57m 43s". h, m и s - все спецификаторы формата. См. Пользовательские строки формата TimeSpan - .NET | Документы Microsoft для получения дополнительной информации.

Согласно документам :

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

Существует два способа включить буквенный символ в строку формата:

  • Заключите его в одинарные кавычки (буквенный разделитель строк).

  • За ним следует обратная косая черта ("\"), которая интерпретируется как escape-символ. Это означает, что в C # строка формата должна либо заключаться в кавычки, либо буквальному символу должен предшествовать дополнительный обратный слеш.

Я пробовал: "hh'h 'mm'm 'ss's'" и @"hh\h mm\m ss\s" без удачи.

TimeSpan tracker;
if (TimeSpan.TryParseExact("2h 57m 43s", @"hh\h mm\m ss\s", null, out tracker))
{
    Console.WriteLine(tracker);
}
else
{
    Console.WriteLine("fail");
}

Это всегда терпит неудачу. Я ожидаю TimeSpan 02:57:43. В настоящее время я работаю над этой проблемой, используя Regex, но хотел бы знать, как я могу проанализировать эту строку, используя TryParseExact?

Ответы [ 2 ]

1 голос
/ 17 мая 2019

Вы можете использовать % после спецификатора формата, и вам нужно экранировать литералы пробела.

TimeSpan.TryParseExact("2h 57m 43s", @"h%\h\ m%\m\ s%\s", null, out tracker)

dotnetfiddle

0 голосов
/ 17 мая 2019

Незначительное обновление в вашем коде:

TimeSpan tracker;
if (TimeSpan.TryParseExact("02h 57m 43s", @"hh\h' 'mm\m' 'ss\s", null, out tracker))
{
    Console.WriteLine(tracker);
}
else
{
    Console.WriteLine("fail");
}

Проблема заключалась в том, что он не мог понять пробел, а также два раза 'h' не соответствовал значению.

Я надеюсь, что этопомогает!

...