2013-07-11 49 views
5

我正在開發一個項目,我需要用一堆東西格式化字符串,但相關部分是第一部分 - 遊:使用前導空格格式化一個DateTime的時間部分,用於一位數的小時

鑑於

DateTime start = Convert.ToDateTime(myClass.StartDateTime); 

如何做的String.Format我將其輸出到顯示或者10:00或<空間> 3:00?

我知道我可以使用格式字符串,如:

string text = string.Format("{0:hh:mm tt}",_start); 

但是這給了我一個前導零(03:00 PM),我不想爲單數的小時數。

有什麼我可以添加到格式字符串來做到這一點,或者我必須手動替換一個空間的前導零? (我懷疑是這種情況,但想問,所以我可以學習如何有格式化方法。)

回答

2

如果你想與格式字符串做這一切,你可以使用一個對準部件。請參閱MSDN上的Composite Formatting

格式項語法

每個格式項都採用以下形式,它由 以下幾部分組成:

{index[,alignment][:formatString]}

...

對準部件

可選對齊組件是一個有符號整數,指示 首選的格式化字段寬度。如果對齊值小於格式化字符串的長度 ,則會忽略對齊,並將格式化字符串的長度用作字段寬度。如果對齊爲正 ,則字段中的格式化數據爲右對齊,如果對齊爲負,則爲左對齊。如果需要填充,則使用 空白區域。如果指定了對齊,則需要逗號。

你想右對齊導致八字場,所以你會在@大衛斯特拉頓的答案中使用的正8對齊組件與格式字符串用單h的,就像這樣:

string _text = string.Format("{0,8:h:mm tt}", _start); 
+0

大衛說,更好的答案。謝謝。 – Deverill

6
string _text = string.Format("{0:h:mm tt}",_start).PadLeft(8, ' '); 

應該這樣做。

時間格式字符串中的單個「h」將使得零不顯示是否是單位數小時,l並且PadLeft函數將確保它是合適的寬度。

+1

整潔的想法使用PadLeft! – Greg

+0

非常好。謝謝。 – Deverill

+1

你也可以在格式字符串中使用一個對齊組件來使'string.Format'爲你填充:'string _text = string.Format(「{0,8:h:mm tt}」,_start);' – Quartermeister

6

您可以在ToString過載中進行條件檢查。

string _text = _start.ToString((_start.Hour > 9) ? "hh:mm tt" : " h:mm tt"); 
+0

我想你可能需要一個'%12',可能還有更多的邏輯 - '_start.Hour'範圍從'0'到'23',但'h'和'hh'範圍從'1'到'12'兩次 – Rawling

+0

@Rawling - 對不起,我不是很理解。你可以給一個時間來解釋OP的要求嗎? '> 9'是爲了檢測是否有兩位數字,所以我想你可以用'_start.Hour.ToString()。長度> 1'替換它。 – keyboardP

+1

好吧,如果是下午1點,'_start.Hour'將會是'13',但'hh'會給出'01'。 – Rawling

相關問題