我的时间是16:23:01。我尝试使用DateTime.ParseExact
,但它无效。
这是我的代码:
string Time = "16:23:01";
DateTime date = DateTime.ParseExact(Time, "hh:mm:ss tt", System.Globalization.CultureInfo.CurrentCulture);
lblClock.Text = date.ToString();
我希望它在标签上显示为04:23:01 PM。
答案 0 :(得分:69)
“16:23:01”与“hh:mm:ss tt”的模式不匹配 - 它没有上午/下午指示符,而且显然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左边。
(另请考虑使用我的Noda Time API,其LocalTime
类型 - 仅适用于“一天中的时间”。
答案 1 :(得分:7)
string Time = "16:23:01";
DateTime date = DateTime.Parse(Time, System.Globalization.CultureInfo.CurrentCulture);
string t = date.ToString("HH:mm:ss tt");
答案 2 :(得分:3)
这为您提供了所需的结果:
string time = "16:23:01";
var result = Convert.ToDateTime(time);
string test = result.ToString("hh:mm:ss tt", CultureInfo.CurrentCulture);
//This gives you "04:23:01 PM" string
您也可以使用CultureInfo.CreateSpecificCulture("en-US")
,因为并非所有文化都会显示上午/下午。
答案 3 :(得分:0)
已接受的解决方案不涉及极端情况。 我找到了使用4KB脚本执行此操作的方法。处理您的输入并转换数据。
示例:
00:00:00 -> 00:00:00
12:01 -> 12:01:00
12 -> 12:00:00
25 -> 00:00:00
12:60:60 -> 12:00:00
1dg46 -> 14:06