Преобразовать время строки в нормальное значение времени, заменив час на правильный

#c# #datetime #time #hour

#c# #дата и время #время #час

Вопрос:

У меня есть следующий пример строковых значений:

 24:05 , 25:08 , 26:59
  

и мне нужна функция или что-то еще, чтобы получить правильное значение времени (чч: мм), например:

 00:05 , 01:08 , 02:59
  

Есть ли в C # метод, который делает это?

Пожалуйста, помогите мне, я собираюсь быть сумасшедшим на этом!!

Спасибо! Приветствия.. Алессандро

Ответ №1:

С помощью regex вы можете сделать это следующим образом:

 var match = Regex.Match("25:05", @"^(d{2,}):(d{2})$");
var hour = int.Parse(match.Groups[1].Value) % 24;
var min = int.Parse(match.Groups[2].Value);

// hour will be 1 and min 5
  

Если вы хотите избежать регулярных выражений, то простой input.IndexOf() и input.SubString() сделает это.

Обновление: Если вам нужен метод для этого, тогда взгляните на это:

 static TimeSpan ParseHHMM(string input)
{
    var match = Regex.Match(input, @"^(d{2,}):(d{2})$");
    var hour = int.Parse(match.Groups[1].Value) % 24;
    var min = int.Parse(match.Groups[2].Value);

    return new TimeSpan(hour, min, 0);
}

// Write to console
Console.WriteLine(ParseHHMM("25:05").ToString(@"hh:mm"));
  

Обновление: я изменил d{2} на d{2,} для часовой части. Это означает, что теперь он может принимать входные данные, подобные 125:05 .

Комментарии:

1. Это именно то, что я хочу. Вы великолепны! Спасибо, лассеспехолт.. Большое вам спасибо

2. Чтобы быть гибким, шаблон должен быть (d ):(d{2}) таким, чтобы соответствовать 3:05, 3:00 123:01, и т.д. Можно было бы возразить, что оно должно быть гибким и по отношению к минутам, но не многие люди представляют время как H: M, обычно это будет как минимум H: MM.

3. @Nicholas Я предположил, что 3: 05 будет записано как 03:05, но да, d это исправит 🙂