Сведения о вопросе

Mathprofi

01:19, 13th August, 2020

Теги

c#   timespan    

Синтаксический анализ строки в TimeSpan

Просмотров: 454   Ответов: 5

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



  Сведения об ответе

crush

06:30, 17th August, 2020

Это, кажется, работает, хотя это немного банально:

TimeSpan span;


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


  Сведения об ответе

Chhiki

21:22, 12th August, 2020

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

В отсутствие TimeSpan.TryParseExact, я думаю, что решение 'elegant' находится вне этой смеси.

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


  Сведения об ответе

SEEYOU

03:03, 29th August, 2020

Здесь е есть еще один возможность:

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();


  Сведения об ответе

repe

21:06, 1st October, 2020

  Сведения об ответе

piter

23:06, 26th August, 2020

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


Ответить на вопрос

Чтобы ответить на вопрос вам нужно войти в систему или зарегистрироваться