2016-11-23 204 views
0

我想根據用戶提供的自定義日期字符串格式化DateTime對象,which may be d for the day of the month without a leading zero日期時間問題

var date = DateTime.ParseExact("2016-11-05T15:30:00", "yyyy-MM-dd\\THH:mm:ss", null); 
Console.WriteLine(date.ToString("d.")); 
Console.WriteLine(date.ToString("d")); 
Console.WriteLine(date.ToString("dd.")); 
Console.WriteLine(date.ToString("dd")); 

結果意外地站出來:

5. 
11/5/2016 
05. 
05 

爲什麼不出來5? 有沒有辦法得到5沒有做出特殊的case語句,並且沒有爲每個格式字符串添加其他字符並在處理後剝離它們(這可能導致或可能不會導致其他格式字符串出錯,但我沒有檢查,但是用戶可能會想出)?

+0

單個'd'是系統區域設置的短日期格式的默認格式說明符。這就是爲什麼你在第二個輸出中獲得完整日期的原因。 –

+0

這可以幫助你解決問題的原因https://msdn.microsoft.com/en-gb/library/az4se3k1(v=vs.110).aspx – Alexis

回答

1

嘗試以下操作:

string d = string.Format("{0:d }", date); 
//       ^this space is important 
// output will have a trailing space, e.g. '5 ' 

Using single custom format specifiers

+0

如果他做了'date.toString(「d」)'',它只在'd'後面加一個空格。 OP要求一種方法,不要特殊情況 – Alexis

+0

是真的。這是足夠的,所以不會與「d」默認格式說明符混淆。使用CKII建議的「%d」更清潔。 –

+0

如果我不想要一個額外的前導空間或尾隨空間,該怎麼辦? –