将字符串转换为时间

时间:2013-09-20 14:41:25

标签: c# asp.net

我的时间是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。

4 个答案:

答案 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

你有主意... 选中https://github.com/alekspetrov/time-input-js