Аналогично решению Райана, но даже более простому, я просто использую простой массив и использую день, чтобы найти правильный порядковый номер:
private string[] ordinals = new string[] {"","st","nd","rd","th","th","th","th","th","th","th","th","th","th","th","th","th","th","th","th","th","st","nd","rd","th","th","th","th","th","th","th","st" };
DateTime D = DateTime.Now;
String date = "Today's day is: "+ D.Day.ToString() + ordinals[D.Day];
У меня не было необходимости, но я бы предположил, что вы можете использовать многомерный массив, если вы хотите иметь поддержку нескольких языков.
Из того, что я помню со времен Uni, этот метод требует минимальных усилий со стороны сервера.