格式化带后缀的dateTime

时间:2016-08-01 18:30:11

标签: c# string datetime string-formatting

我有以下代码并使用静态方法我正在尝试向日期时间对象添加后缀并基于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);

}

我得到了下面的结果,我希望日期输出2015年4月4日如果输出格式指定为dd MMMM yyyy但我得到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

1 个答案:

答案 0 :(得分:1)

你的问题是你在格式化字符串时传递date.Month(一个int)而不是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)