ОБНОВЛЕНИЕ
Пакет NuGet:
https://www.nuget.org/packages/DateTimeToStringWithSuffix
Пример:
https://dotnetfiddle.net/zXQX7y
Поддержка:
.NET Core 1.0 и выше
.NET Framework 4.5 и выше
Вот метод расширения (потому что все любят методы расширения), с ответом Lazlow в качестве основы (выбрал Lazlow, поскольку его легко прочитать).
Работает так же, как обычный метод ToString()
в DateTime
, за исключением того, что если формат содержит d
или dd
, суффикс будет добавлен автоматически.
/// <summary>
/// Return a DateTime string with suffix e.g. "st", "nd", "rd", "th"
/// So a format "dd-MMM-yyyy" could return "16th-Jan-2014"
/// </summary>
public static string ToStringWithSuffix(this DateTime dateTime, string format, string suffixPlaceHolder = "$") {
if(format.LastIndexOf("d", StringComparison.Ordinal) == -1 || format.Count(x => x == 'd') > 2) {
return dateTime.ToString(format);
}
string suffix;
switch(dateTime.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;
}
var formatWithSuffix = format.Insert(format.LastIndexOf("d", StringComparison.InvariantCultureIgnoreCase) + 1, suffixPlaceHolder);
var date = dateTime.ToString(formatWithSuffix);
return date.Replace(suffixPlaceHolder, suffix);
}