Подтвердить что ты не робот

Разбирайте строку в TimeSpan

У меня есть некоторые строки формата xxh: yym, где xx - часы, а yy - минуты, такие как "05h: 30m". Каков элегантный способ преобразования строки этого типа в TimeSpan?

4b9b3361

Ответ 1

Кажется, что это работает, хотя оно немного хакерское:

TimeSpan span;


if (TimeSpan.TryParse("05h:30m".Replace("m","").Replace("h",""), out span))
            MessageBox.Show(span.ToString());

Ответ 2

DateTime.ParseExact или DateTime.TryParseExact позволяет указать точный формат ввода. После того, как вы получите DateTime, вы можете захватить DateTime.TimeOfDay, который является TimeSpan.

В отсутствие TimeSpan.TryParseExact, я думаю, что "изящное" решение выходит из состава.

@buyutec Как вы подозревали, этот метод не будет работать, если промежутки времени имеют более 24 часов.

Ответ 3

Вот одна из возможностей:

TimeSpan.Parse(s.Remove(2, 1).Remove(5, 1));

И если вы хотите сделать его более элегантным в своем коде, используйте метод расширения:

public static TimeSpan ToTimeSpan(this string s)
{
  TimeSpan t = TimeSpan.Parse(s.Remove(2, 1).Remove(5, 1));
  return t;
}

Затем вы можете сделать

"05h:30m".ToTimeSpan();

Ответ 5

Являются TimeSpan.Parse и TimeSpan.TryParse не варианты? Если вы не используете "одобренный" формат, вам нужно будет вручную разобрать. Я бы, вероятно, захватил ваши два целочисленных значения в регулярном выражении, а затем попытаюсь проанализировать их на целые числа, оттуда вы можете создать новый TimeSpan с его конструктором.