String getDayOfMonthSuffix(finalint n) { checkArgument(n >= 1 && n <= 31, "illegal day of month: " + n); if (n >= 11 && n <= 13) { return"th"; } switch (n % 10) { case1: return"st"; case2: return"nd"; case3: return"rd"; default: return"th"; } }
Таблица от @kaliatech приятная, но поскольку одна и та же информация повторяется, это создает вероятность ошибки. Такая ошибка на самом деле существует в таблице для 7tn, 17tn и 27tn (эта ошибка может быть исправлена со временем из-за изменчивого характера StackOverflow, поэтому проверьте историю версий ответа, чтобы увидеть ошибку).
Я хотел бы предложить современный ответ. Класс SimpleDateFormat можно было использовать, когда вопрос задавался 8 лет назад, но вам следует избегать его сейчас, поскольку он не только давно устарел, но и, как известно, доставляет много хлопот. Используйте java.time вместо этого.
Редактировать
DateTimeFormatterBuilder.appendText(TemporalField, Map<Long, String>) отлично подходит для этой цели. Используя его, мы создаем программу форматирования, которая выполняет всю работу за нас:
Одна из многих особенностей java.time заключается в том, что легко и надежно получить день месяца в виде int, что, очевидно, необходимо для выбора правильного суффикса из таблицы.