在下面的代码中,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.ParseExact
和new 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");