2016-08-01 35 views
0

Ich habe den folgenden Code und mit einer statischen Methode Ich versuche, ein Suffix zum Datum Uhrzeit Objekt und basierend auf dem outputFormat, die auch im im Versuch, das Datum zu formatieren und als String zurückgebenFormatierung dateTime mit Suffix

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

} 

ich das folowing Ergebnis bin immer, ich will das Datum Ausgabe 4. April 2015 sein, wenn teh output als dd MMMM yyyy angegeben ist, aber ich bin immer MMMM zurückgegeben. Ich habe http://www.csharp-examples.net/string-format-datetime/ gelesen, und es sagt

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

verwenden Kann jemand sehen, was im Unrecht tun Sie?

Dank

enter image description here

+0

ich keine Probleme mit dem Code haben kompilieren, alles funktioniert gut abgesehen davon gibt MMMM anstelle des Monats Name – Paul

Antwort

1

Ihr Problem ist, dass Sie date.Month (ein int) anstelle von date (a Datetime), wenn die Formatierung der Zeichenfolge vorbei sind:

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

Das macht Sinn:

date.ToString("MMMM"); 

Dies gilt nicht:

date.Month.ToString("MMMM"); 

sollten Sie in der Lage sein, nur die .Month Drop-off des Arguments vorbei sind Sie in Ihrem Problem zu beheben:

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

Hallo, sagst du, dass die Codezeile wie folgt sein sollte? Rückgabe outputFormat == "d MMMM yyyy"? string.Format ("{0} {1} {2} {3}", Datum.Tag, Suffix, Datum.ToString ("MMMM"), Datum.Jahr): string.Format ("{0} {1} ", date.Day, Suffix); – Paul

+0

Das sollte auch funktionieren. Alternativ können Sie folgendes tun: 'return outputFormat ==" d MMMM yyyy "? string.Format ("{0} {1} {2: MMMM} {3}", Datum.Tag, Suffix, Datum, Datum.Jahr): string.Format ("{0} {1}", date.Day , Suffix); '(genau das, was Sie hatten, außer ohne die '.Month'-Eigenschaft.) – itsme86

+0

Perfekt! ich verstehe. Lass mich dies versuchen. – Paul