Ответ 1
"16:23:01" не соответствует шаблону "hh: mm: ss tt" - у него нет указателя am/pm, а 16 явно не в 12-часовом режиме. Вы указываете этот формат в части синтаксического анализа, поэтому вам нужно соответствовать формату существующих данных. Вы хотите:
DateTime dateTime = DateTime.ParseExact(time, "HH:mm:ss",
CultureInfo.InvariantCulture);
(Обратите внимание на инвариантную культуру, а не на текущую культуру - если ваш вход действительно использует двоеточия.)
Если вы хотите отформатировать его до hh:mm:ss tt
, вам нужно поместить эту часть в вызов ToString
:
lblClock.Text = date.ToString("hh:mm:ss tt", CultureInfo.CurrentCulture);
Или еще лучше (IMO) использовать "какой бы длинный шаблон времени для культуры":
lblClock.Text = date.ToString("T", CultureInfo.CurrentCulture);
Также обратите внимание, что hh
необычен; обычно вы не хотите, чтобы 0-левый-pad номер для чисел меньше 10.
(Также рассмотрите использование моего API Noda Time, который имеет тип LocalTime
- более подходящее соответствие только для "времени суток".)