#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
это исправит 🙂