Разобрать строку по временному интервалу

StackOverflow https://stackoverflow.com/questions/26760

  •  09-06-2019
  •  | 
  •  

Вопрос

У меня есть несколько строк формата 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();

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top