Получение суффикса дня при использовании DateTime.ToString () - PullRequest
70 голосов
/ 12 января 2010

Можно ли включить суффикс дня при форматировании даты с использованием DateTime.ToString ()?

Например, я хотел бы напечатать дату в следующем формате - понедельник 27 июля 2009 г. Однако самый близкий пример, который я могу найти, используя DateTime.ToString (), - понедельник 27 июля 2009 г.

Могу ли я сделать это с помощью DateTime.ToString () или мне придется вернуться к собственному коду?

Ответы [ 15 ]

0 голосов
/ 11 ноября 2013

Для чего стоит мое окончательное решение, используя ответы ниже

     DateTime dt = DateTime.Now;
        string d2d = dt.ToString("dd").Substring(1); 

        string suffix =
       (dt.Day == 11 || dt.Day == 12 || dt.Day == 13) ? "th"
       : (d2d == "1") ? "st"
       : (d2d == "2") ? "nd"
       : (d2d == "3") ? "rd"
       : "th";


        Date.Text = DateTime.Today.ToString("dddd d") + suffix + " " + DateTime.Today.ToString("MMMM") + DateTime.Today.ToString(" yyyy"); 
0 голосов
/ 22 марта 2013

Я сделал это так, он обходит некоторые проблемы, приведенные в других примерах.

    public static string TwoLetterSuffix(this DateTime @this)
    {
        var dayMod10 = @this.Day % 10;

        if (dayMod10 > 3 || dayMod10 == 0 || (@this.Day >= 10 && @this.Day <= 19))
        {
            return "th";
        }
        else if(dayMod10 == 1)
        {
            return "st";
        }
        else if (dayMod10 == 2)
        {
            return "nd";
        }
        else
        {
            return "rd";
        }
    }
0 голосов
/ 14 марта 2013

Дешевое и веселое решение VB:

litDate.Text = DatePart("dd", Now) & GetDateSuffix(DatePart("dd", Now))

Function GetDateSuffix(ByVal dateIn As Integer) As String

    '// returns formatted date suffix

    Dim dateSuffix As String = ""
    Select Case dateIn
        Case 1, 21, 31
            dateSuffix = "st"
        Case 2, 22
            dateSuffix = "nd"
        Case 3, 23
            dateSuffix = "rd"
        Case Else
            dateSuffix = "th"
    End Select

    Return dateSuffix

End Function
0 голосов
/ 11 октября 2012

Другая опция, использующая последний символ строки:

public static string getDayWithSuffix(int day) {
 string d = day.ToString();
 if (day < 11 || day > 13) {
  if (d.EndsWith("1")) {
   d += "st";
  } else if (d.EndsWith("2")) {
   d += "nd";
  } else if (d.EndsWith("3")) {
   d += "rd";
  } else {
   d += "th";
 } else {
  d += "th";
 }
 return d;
}
0 голосов
/ 12 января 2010

в документации MSDN нет ссылки на культуру, которая могла бы преобразовать эти 17 в 17-ые. так что вы должны сделать это вручную через code-behind. Или собрать один ... вы можете создать функцию, которая делает это.

public string CustomToString(this DateTime date)
    {
        string dateAsString = string.empty;
        <here wright your code to convert 17 to 17th>
        return dateAsString;
    }
...