2016-08-01 157 views
0

我有以下代碼並使用靜態方法我試圖添加一個後綴到日期時間對象和基於outputFormat也是通過即時試圖格式化日期和返回字符串格式化日期時間後綴

var outputFormat = date.Month != nextDate.Month || isLast ? "d MMMM yyyy" : "dd"; 

if (isLastMonthDay) 
{ 
    formattedDate.AppendFormat("{0}{1}", GetDateSuffix(date, outputFormat), "<br><br>"); 
} 
else 
{ 
    formattedDate.AppendFormat("{0}{1}", GetDateSuffix(date, outputFormat).TrimStart('0'), ", "); 
} 

private static string GetDateSuffix(DateTime date, string outputFormat) 
{ 
    string suffix; 

    switch (date.Day) 
    { 
     case 1: 
     case 21: 
     case 31: 
      suffix = "st"; 
      break; 
     case 2: 
     case 22: 
      suffix = "nd"; 
      break; 
     case 3: 
     case 23: 
      suffix = "rd"; 
      break; 
     default: 
      suffix = "th"; 
      break; 
    } 

    return outputFormat == "d MMMM yyyy" ? string.Format("{0}{1} {2:MMMM} {3}", date.Day, suffix, date.Month, date.Year) : string.Format("{0}{1}", date.Day, suffix); 

} 

我得到如下因素的結果,我想如果德OUTPUTFORMAT被指定爲DD MMMM YYYY日期爲輸出2015年4月4日,但我越來越MMMM返回。我已閱讀http://www.csharp-examples.net/string-format-datetime/和它說使用

String.Format("{0:M MM MMM MMMM}", dt); // "3 03 Mar March" month 

任何人都可以看到什麼即時做錯了嗎?

感謝

enter image description here

+0

我沒有問題的代碼編譯,一切除了輸出MMMM而不是月份名稱外,還可以正常工作 – Paul

回答

1

你的問題是,你傳遞date.Month(一個int),而不是date(日期時間)格式化字符串時:

string.Format("{0}{1} {2:MMMM} {3}", date.Day, suffix, date.Month, date.Year) 

這是有道理的:

date.ToString("MMMM"); 

這不:

date.Month.ToString("MMMM"); 

您應該能剛落.Month關閉你正在傳遞解決您的問題的說法:

string.Format("{0}{1} {2:MMMM} {3}", date.Day, suffix, date, date.Year) 
+0

嗨,你是說這行代碼應該如下所示?返回outputFormat ==「d MMMM yyyy」? string.Format(「{0} {1} {2} {3}」,date.Day,suffix,date.ToString(「MMMM」),date.Year):string.Format(「{0} {1} 「,日期,後綴); – Paul

+0

這也應該工作。或者,你應該能夠做到:'return outputFormat ==「d MMMM yyyy」? string.Format(「{0} {1} {2:MMMM} {3}」,date.Day,suffix,date,date.Year):string.Format(「{0} {1}」,date.Day ,後綴);'(除了沒有'.Month'屬性以外,正是你所擁有的。) – itsme86

+0

完美!我明白。讓我試試這個。 – Paul