DateTime.Parse格式"H"的确切抛出格式异常



在下面的代码中,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"并为键值对[0]添加一个零?

"

H"不起作用,因为假定单字符格式字符串是标准日期和时间格式字符串,但"H"不是标准格式之一。若要指定具有单个说明符的自定义格式字符串,请在说明符前面加上"%":

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)new TimeSpan(h, 0, 0) 将接受小于 0 或大于 23 的h值。

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

time = DateTime.ParseExact(keyValuePair[0].PadLeft(2, '0'), "HH", CultureInfo.CurrentCulture).ToString("t");
int input = int.Parse(keyValuePair[0]);
time = DateTime.Today.AddHours(input).ToString("t");
time = new DateTime(1, 1, 1, Convert.ToInt32(keyValuePair[0]), 0, 0).ToString("t");

最新更新