#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