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