Разобрать строку в TimeSpan - PullRequest
29 голосов
/ 26 августа 2008

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

Ответы [ 5 ]

27 голосов
/ 26 августа 2008

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

TimeSpan span;


if (TimeSpan.TryParse("05h:30m".Replace("m","").Replace("h",""), out span))
            MessageBox.Show(span.ToString());
6 голосов
/ 26 августа 2008

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

В отсутствие TimeSpan.TryParseExact, я думаю, что «элегантное» решение не подходит.

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

2 голосов
/ 05 июня 2009
2 голосов
/ 26 августа 2008

Вот одна возможность:

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();
1 голос
/ 26 августа 2008

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

...