Преобразования .Чистая datetime в строку, используя порядковые числительные


С типом datetime объект, его легко получить, например, 11 октября 2011 года с использованием:

d.ToString("d MMMM yyyy");

Однако, там, кажется, нет встроенного метода, чтобы получить на выходе 11 октября 2011 года.

Так вот возможный способ расширения.

public string ToStringWithOrdinal(this DateTime d) {
  var sb = new StringBuilder(d.Day);
  switch (d.Day) {
    case 1:
    case 21:
    case 31:
      sb.Append("st");
      break;
    case 2:
    case 22:
      sb.Append("nd");
      break;
    case 3:
    case 23:
      sb.Append("rd");
      break;
    default:
      sb.Append("th");
      break;
  }
  sb.Append(" ").Append(d.ToString("MMMM yyyy"));
  return sb.ToString();
}

Кто-нибудь может придумать какие-либо улучшения, либо для производительности или для добавления функциональности в формате параметр, так что мы можем назвать, например, Д. ToStringWithOrdinal("д^ мммм");?

Спасибо.



3686
4
задан 11 октября 2011 в 02:10 Источник Поделиться
Комментарии
1 ответ

Вы можете упростить его немного и сделать тривиальные улучшения производительности (это будет заметно, если вы вызовите этот метод много).

public static string ToStringWithOrdinal(this DateTime d) {
switch (d.Day) {
case 1: case 21: case 31:
return d.ToString("dd'st' MMMM yyyy");
case 2: case 22:
return d.ToString("dd'nd' MMMM yyyy");
case 3: case 23:
return d.ToString("dd'rd' MMMM yyyy");
default:
return d.ToString("dd'th' MMMM yyyy");
}
}

Как Примечание стороны, этот формат не читает хорошо для меня. Обычно я хотел бы написать это следующим образом:


11 октября 2011 года

Этот формат распространен в Великобритании?

4
ответ дан 11 октября 2011 в 06:10 Источник Поделиться