2014-02-22 33 views
0

在下面的代碼中,keyValuePair [0]是0-23小時的字符串表示形式,即keyValuePair[0] == "2"表示2:00 AM。 13下午1點。我希望能夠在12小時制和24小時制時鐘中顯示此值。格式爲「H」的DateTime.ParseExact引發格式異常

一個例子:

keyValuePair[0] == 13使得time等於 「13:00」 OR 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

對不起,這是一個錯字。 – Dave

+0

如果是數字,你爲什麼必須將它解析爲'DateTime'?你可以將它解析爲數字並添加日期'new DateTime().AddHours(int.Parse(keyValuePair [0]))'並且設置你想要的任何方式... –

+0

確實有一個點停止合理使用DateTime.Parse()。當然這應該是'time = new TimeSpan(int.Parse(keyValuePair [0]),0,0);' –

回答

0
time = new DateTime(1, 1, 1, Convert.ToInt32(keyValuePair[0]), 0, 0).ToString("t"); 
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)new TimeSpan(h, 0, 0)之間將接受小於0或大於23的h的值。

0

只需使用PadLeft(2, '0')即可達到您想要的效果!

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