"16:23:01"与"hh:mm:ss tt"的模式不匹配——它没有am/pm指示器,16显然不在12小时时钟中.在parsing部分中指定了该格式,因此需要匹配现有数据的格式.你想要:
DateTime dateTime = DateTime.ParseExact(time, "HH:mm:ss",
CultureInfo.InvariantCulture);
(请注意不变区域性,not是当前区域性-假设您的输入确实总是使用冒号.)
如果你想把它变成hh:mm:ss tt
,那么你需要把这部分放到ToString
通话中:
lblClock.Text = date.ToString("hh:mm:ss tt", CultureInfo.CurrentCulture);
或者更好的做法是(IMO)使用"无论文化的长期模式是什么":
lblClock.Text = date.ToString("T", CultureInfo.CurrentCulture);
还要注意,hh
是不寻常的;通常情况下,对于小于10的数字,要用0左键填充数字.
(还可以考虑使用我的Noda TimeAPI,它的类型是LocalTime
-对于"一天中的某个时间"来说,这是一个更合适的匹配.)