2016-06-25 21 views
1

在.NET應用程序,我想格式化一個固定長度格式的日期和時間,但當天如下沒有前導零:如何消除.Net DateTime的'd'標準和自定義格式字符串之間的歧義?

String.Format("{0:d MMM HH:mm:ss}", DateTime.Now); 
"25 Jun 04:21:11" 

這適用於該月的天大於十,但(如documented)不插入前導空格。現在,下面應提供所要求的格式:

String.Format("{0,2:d}", DateTime.Now); 
"25/06/2016" 

但是,正如所看到的,而不是格式化使用標準Short date格式字符串的日期。我可以使用:

String.Format("{0,2:''d} {0:MMM HH:mm:ss}", DateTime.Now.AddDays(-20)); 
" 5 Jun 04:21:11" 

以獲得所需的效果,但這似乎並不令人滿意。 有沒有更少的解決方法讓格式化程序使用單獨的d的自定義格式字符串解釋而不是短日期標準格式?

+0

在日期之前插入一個空格是一件不尋常的事情...您爲什麼期望日期格式支持? –

+0

由於數字格式通常使用'#'字符作爲格式中空格的空格。 – Pekka

回答

1

要在格式爲單個字符時區分自定義格式和標準格式,請使用%符號。例如:{0:d}給出了標準的日期格式,但{0:%d}只給出該月的一天。見the MSDN docs for more details

所以,你可以這樣做:

String.Format("{0,2:%d} {0:MMM HH:mm:ss}", ... 

然而,考慮您也可以只指定整個字符串的長度:

String.Format("{0,15:d MMM HH:mm:ss}", ... 

當然,這個假設MMM將總是三個字符長。對於英語來說這是事實(因爲.NET使用「Sep」而不是「Sept」),但不能保證所有的語言和語言環境。

另請注意,您應該使用HH 24小時。 hh給出了12小時的時間,但是沒有使用tt來表示meridem指定(am/pm)是沒有意義的。

+0

我已更新格式以使用'HH'來表示正確性,並感謝您在正確的方式強制使用自定義格式說明符後,在非常長的頁面末尾找到文檔。 – Pekka

相關問題