Не удается проанализировать промежуток времени с запятыми для разделения

#c# #.net #timespan

Вопрос:

Как я могу отправить строку "0, 0, 0, 5, 0" (d, h, m, s, f), TimeSpan чтобы она могла ее проанализировать? Входная строка должна быть именно в этом формате.

Это должно быть что-то вроде этого:

 TimeSpan ts;
var tmp = TimeSpan.TryParseExact("1, 2, 3, 4, 5", "dd, hh, mm, ss, ff", null, out ts);
// fails, tmp = false, ts = 0:00:00:00
 

Я не могу использовать FromSecond и FromMinutes т. Д. , Потому что это может быть "0, 15, 0, 0, 0" или "1, 0, 0, 0, 0"

Я могу сделать это вот так:

 var data = ApplicationConfiguration.Instance
    .GetAppConfigValue("SavingRewardConfigurationCachingPeriod") ?? "0, 0, 0, 5, 0";

var tmp0 = new TimeSpan(
  data [0],
  data [1],
  data [2],
  data [3],
  data [4]);
 

Но я хотел бы найти лучший способ сделать это.

Комментарии:

1. У вас есть часть кода в вопросе, но вы забыли сказать, почему это не работает для вас

2. @dmytro.kozyr Вы имеете в виду, что это TryParse возвращается flase , потому что формат не совпадает.

3. Я использовал строковый литерал формата @"d, h, m, s, f"

4. @Wyck Спасибо, это сработало

5. @AhmadIbrahim Для форматирования двойных букв требуется заполнение нулем, в то время как для одинарных-нет, но они будут работать со значениями, содержащими более одной цифры.

Ответ №1:

Вам нужно только , удалить части строки (как указано в документации), что достигается путем их окружения одинарными кавычками ( ' ):

 var tmp = TimeSpan.TryParseExact("1, 2, 3, 4, 5", "d', 'h', 'm', 's', 'f", null, out ts);
 

Пример скрипки: https://dotnetfiddle.net/M7GOWR