DateTime.ParseExact格式为“H”的抛出格式异常

时间:2014-02-22 01:32:29

标签: c# .net date datetime datetime-format

在下面的代码中,keyValuePair [0]是小时0-23的字符串表示,即keyValuePair[0] == "2"代表凌晨2:00。 13下午1:00。我希望能够在12小时和24小时的时钟中显示这个值。

示例:

keyValuePair[0] == 13使值time等于“13:00”或“1:00 PM”,具体取决于当前的文化。

time = DateTime.ParseExact(keyValuePair[0], "H", CultureInfo.CurrentCulture).ToString("t");

仅当keyValuePair [0]具有2位数值时才有效,并且我将格式"H"切换为"HH"。但是,我的输入可能是1位数输入。当输入为1时数字长,我使用格式"HH"我得到一个无效的格式异常。

也许有一种更简单的方法可以做到这一点?我想我应该只使用“HH”并将一个零添加到keyValuePair [0]?

4 个答案:

答案 0 :(得分:0)

time = new DateTime(1, 1, 1, Convert.ToInt32(keyValuePair[0]), 0, 0).ToString("t");

答案 1 :(得分:0)

“H”不起作用,因为假定单字符格式字符串是standard date and time format string,但“H”不是标准格式之一。要指定custom format string with a single specifier,请在说明符前加“%”:

time = DateTime.ParseExact(keyValuePair[0], "%H", CultureInfo.CurrentCulture).ToString("t");

注意: DateTime.ParseExactnew DateTime(1, 1, 1, h, 0, 0)(Nimesh的回答)都会验证指定的小时是否介于0到23之间。相比之下,DateTime.AddHours(h)和{ {1}}将接受new TimeSpan(h, 0, 0)小于0或大于23的值。

答案 2 :(得分:0)

只需使用PadLeft(2, '0')即可实现您的目标!

time = DateTime.ParseExact(keyValuePair[0].PadLeft(2, '0'), "HH", CultureInfo.CurrentCulture).ToString("t");

答案 3 :(得分:0)

int input = int.Parse(keyValuePair[0]);
time = DateTime.Today.AddHours(input).ToString("t");