“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
是不寻常的;通常你不想为小于 10 的数字填充 0-left-pad 数字。
(还可以考虑使用我的Noda Time API,它有一个LocalTime
类型——更适合“一天中的时间”。)