Форматирование даты с суффиксом в Java: "11-е", "21-е", "23-е"
Быстрый ответ
Чтобы придать числовому значению дня недели окончание, характерное для ординального числительного ("ое", "е"), предлагается следующая функция на языке Java:
public static String formatDay(int day) {
Preconditions.checkArgument(day > 0 && day <= 31, "Недопустимое значение дня: %s", day);
switch (day) {
case 11:
case 12:
case 13:
return day + "-е"; // Исключение для чисел 11, 12, 13, суффикс "-е".
default:
return day + "-ое"; // У остальных чисел окончание "-ое".
}
}
// Добавьте немного изюминки в форматирование даты вашего приложения
String formattedDate =
new SimpleDateFormat("MMMM yyyy").format(date) +
" " + formatDay(Calendar.getInstance().get(Calendar.DAY_OF_MONTH));
Достаточно передать в formatDay
номер дня и соединить его с форматами месяца и года, заданными через SimpleDateFormat
. Таким образом, дата может отображаться в формате "Апрель 1-е 2023".
Детальное рассмотрение кода для начинающих
Выше представлен стандартный подход к добавлению ординальных суффиксов при форматировании даты в Java. Функция принимает число дня и проверяет его корректность с помощью Preconditions.checkArgument
из библиотеки Google Guava.
Затем, в зависимости от числа дня, код формирует соответствующее окончание, учитывая специфику для чисел 11, 12 и 13.
Дополнительные инструменты
После освоения базовых аспектов можно дополнить функциональность кода введением локализации и механизмов повторного использования. Реализация массива суффиксов упростит поддержку различных языков и сделает код более оптимальным.
Модуль java.time
и DateTimeFormatterBuilder
представляют себе современные инструменты работы с датами, которые облегчают процесс форматирования ординальных числительных. Обновления в библиотеке Google Guava помогут предупредить возможные ошибки и улучшить производительность.
Современный подход к форматированию даты
Повышенного уровня Java-разработчики могут использовать преимущества класса java.time
. Рассмотрим изящный метод форматирования даты:
public static String formatDayWithJavaTime(LocalDate date) {
String[] suffixes = { "-ое", "-ое", "-ое", "-ое", "-ое", "-ое", "-ое", "-ое", "-ое", "-ое" };
int day = date.getDayOfMonth();
String suffix = (day >= 11 && day <= 13) ? "-е" : suffixes[day % 10];
DateTimeFormatter formatter = new DateTimeFormatterBuilder()
.appendText(ChronoField.DAY_OF_MONTH)
.appendLiteral(suffix)
.appendPattern(" MMMM yyyy")
.toFormatter();
return date.format(formatter);
}
С помощью java.time.LocalDate
и настроенного DateTimeFormatterBuilder
код корректно добавляет ординальные суффиксы, эффективно использовав возможности современных API Java.
Значимость модульного тестирования
Модульное тестирование играет ключевую роль в проверке правильной работы кода форматирования дат. В качестве примера модульного теста можно рассмотреть следующий код:
@Test
public void testOrdinalDayFormatter() {
assertEquals("1-ое", formatDay(1));
assertEquals("2-ое", formatDay(2));
assertEquals("3-ое", formatDay(3));
assertEquals("11-е", formatDay(11));
assertEquals("12-е", formatDay(12));
assertEquals("13-е", formatDay(13));
assertEquals("21-ое", formatDay(21));
// Продолжить тестирование для других значений...
}
Визуализация
Процесс форматирования дат в Java можно представить в виде картографического процесса создания карты ординальных числительных:
Карта дней: 1-ое 📍, 2-ое 📍, 3-ое 📍, 4-ое... [и до]... 31-ое 📍
Formatter
ведет себя как искусный картограф, размещая метки на карте вашего календаря:
String formattedDay = new Formatter().format("%1$te%1$ts", date).toString();
Каждый день помечается соответствующим образом:
| День | Отметка |
| ---- | ------- |
| 1 | ое |
| 2 | ое |
| 3 | ое |
| 4-20 | ое |
| 21 | ое |
| ... | ... |
| 31 | ое |
В итоге получаем карту, где каждая дата обозначена соответствующим ординальным числительным.
Полезные материалы
- DateTimeFormatter (Java Platform SE 8) — для создания собственных форматов даты.
- ICU User Guide | ICU Documentation — подробное руководство по форматированию чисел.
- StringUtils (Apache Commons Lang 3.11) — полезные функции для работы со строками.
- Joda-Time – Java date — хорошая альтернатива SimpleDateFormat.
- Java – Дата и время — обучающий курс по работе с датой и временем в Java.
В этом списке представлены как исчерпывающие документации, так и практические учебные материалы для работы с датами в Java.