2016-08-01 233 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