Я испытываю метод DateTime.TryParseExact
, и я натолкнулся на случай, который я просто не понимаю. У меня есть несколько форматов и несколько предметов для разбора, каждый из которых должен идеально соответствовать одному из форматов:
var formats = new[]
{
"%H",
"HH",
"Hmm",
"HHmm",
"Hmmss",
"HHmmss",
};
var subjects = new[]
{
"1",
"12",
"123",
"1234",
"12345",
"123456",
};
Затем я пытаюсь разобрать их все и распечатать результаты:
foreach(var subject in subjects)
{
DateTime result;
DateTime.TryParseExact(subject, formats,
CultureInfo.InvariantCulture,
DateTimeStyles.NoCurrentDateDefault,
out result);
Console.WriteLine("{0,-6} : {1}",
subject,
result.ToString("T", CultureInfo.InvariantCulture));
}
Я получаю следующее:
1 : 01:00:00
12 : 12:00:00
123 : 00:00:00
1234 : 12:34:00
12345 : 00:00:00
123456 : 12:34:56
И на мой вопрос ... почему он не работает на 123 и 12345? Разве они не должны стать 01:23:00 и 01:23:45? Что мне здесь не хватает? И как я могу заставить его работать так, как я ожидал?
Обновление: Похоже, мы могли бы выяснить, почему это не так. Похоже, что H
на самом деле захватывает две цифры и затем оставляет только одну для mm
, которая затем потерпит неудачу. Но есть ли у кого-нибудь хорошая идея о том, как я могу изменить этот код, чтобы получить результат, который я ищу?
Еще одно обновление: Думаю, я нашел разумное решение сейчас. Добавил это как ответ. Примет это через 2 дня, если кто-то еще не придумал еще лучше. Спасибо за помощь!