使用后缀格式化日期时间

Formatting dateTime with suffix

我有以下代码并使用静态方法我正在尝试向日期时间对象添加后缀并基于也传递的 outputFormat 我试图将日期和 return 格式化为一个字符串

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);

}

我得到以下结果,如果将输出格式指定为 dd MMMM yyyy,我希望输出日期为 2015 年 4 月 4 日,但我得到的是 MMMM returned。我已经阅读 http://www.csharp-examples.net/string-format-datetime/ 并且它说使用

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

谁能看出我做错了什么?

谢谢

你的问题是你在格式化字符串时传递 date.Month(一个整数)而不是 date(一个 DateTime):

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)