Разобрать строку по временному интервалу
Вопрос
У меня есть несколько строк формата xxh: yym, где xx - часы, а yy - минуты, например, "05h: 30m".Каков элегантный способ преобразовать строку этого типа в TimeSpan?
Решение
Кажется, это работает, хотя и немного халтурно:
TimeSpan span;
if (TimeSpan.TryParse("05h:30m".Replace("m","").Replace("h",""), out span))
MessageBox.Show(span.ToString());
Другие советы
DateTime.ParseExact
или DateTime.TryParseExact
позволяет указать точный формат входных данных.После того, как вы получите DateTime
, вы можете захватить DateTime.TimeOfDay
который является TimeSpan
.
В отсутствие TimeSpan.TryParseExact
, Я думаю, что "элегантное" решение не подходит.
@buyutec Как вы и подозревали, этот метод не будет работать, если промежутки времени превышают 24 часа.
Вот одна из возможностей:
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();
Из другого потока:
Являются Временной интервал.Синтаксический анализ и Временной интервал.Попробуйте проанализировать нет вариантов?Если вы не используете "утвержденный" формат, вам нужно будет выполнить синтаксический анализ вручную.Я бы, вероятно, записал ваши два целых значения в регулярном выражении, а затем попытался разобрать их на целые числа, оттуда вы можете создать новый временной интервал с помощью его конструктора.