@estry

Как выпарсить минуты и секунды из строки и преобразовать в строку для передачи в TimeSpan C#?

Есть строка: PT72M41S
Где 72 означает минуты, а 41 секунды.
Как эту строку распарсить на строку вида 1:12:41?
  • Вопрос задан
  • 235 просмотров
Решения вопроса 2
LoliDeveloper
@LoliDeveloper
Линейная алгебра как смысл жизни
С массивом символов наверное можно какими-то выражениями, но так тоже можно
string str = "PT7M4S";
            char[] symbols = { '0','1','2','3','4','5','6','7','8','9' }; //определяем возможные значения времени
            int quanMin; //тут храним сколько знаков отводится на минуты
            int quanSec; //на секунды
            if (str.IndexOfAny(symbols, 3) == 3)// проверяем сколько знаков отводится под минуты
                {
                    quanMin = 2;  //если под индексом 3 в строке находится цифра
                }
                else 
                {
                    quanMin = 1;  //если под индексом 3 в строке не цифра
                }

                if (quanMin == 1) // проверяем сколько знаков отводится под секунды с учётом того, сколько отвели под минуты
                {
                    quanSec = str.IndexOfAny(symbols, 5) == 5 ? 2 : 1; //индекс сдвигается, в зависимости от колличества знаков, отведённых под минуты
                }
                else
                {
                    quanSec = str.IndexOfAny(symbols, 6) == 6 ? 2 : 1; 
                }
                TimeSpan timespan = new TimeSpan(0, int.Parse(str.Substring(2, quanMin)), int.Parse(str.Substring((quanMin == 1 ? 4 : 5), quanSec))); //создаём объект TimeSpan
                Console.WriteLine(timespan); //вывод
            //=>00:07:04
Ответ написан
Комментировать
@yuopi
C# developer
var input = "PT7M41S";
var time = input.Trim('P', 'T', 'S').Split('M').Select(e => int.Parse(e));
var timeSpan = new TimeSpan(0, time.First(), time.Last());
Console.WriteLine(timeSpan.ToString());
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
string str = "PT72M41S";

TimeSpan timeSpan = new TimeSpan(0, int.Parse(str.Substring(2, 2)), int.Parse(str.Substring(5, 2)));

Console.WriteLine(timeSpan); //=> 01:12:41
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы