Форматирование даты с суффиксом в Java: "11-е", "21-е", "23-е"

Пройдите тест, узнайте какой профессии подходите

Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Быстрый ответ

Чтобы придать числовому значению дня недели окончание, характерное для ординального числительного ("ое", "е"), предлагается следующая функция на языке Java:

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".

Кинга Идем в IT: пошаговый план для смены профессии

Детальное рассмотрение кода для начинающих

Выше представлен стандартный подход к добавлению ординальных суффиксов при форматировании даты в Java. Функция принимает число дня и проверяет его корректность с помощью Preconditions.checkArgument из библиотеки Google Guava.

Затем, в зависимости от числа дня, код формирует соответствующее окончание, учитывая специфику для чисел 11, 12 и 13.

Дополнительные инструменты

После освоения базовых аспектов можно дополнить функциональность кода введением локализации и механизмов повторного использования. Реализация массива суффиксов упростит поддержку различных языков и сделает код более оптимальным.

Модуль java.time и DateTimeFormatterBuilder представляют себе современные инструменты работы с датами, которые облегчают процесс форматирования ординальных числительных. Обновления в библиотеке Google Guava помогут предупредить возможные ошибки и улучшить производительность.

Современный подход к форматированию даты

Повышенного уровня Java-разработчики могут использовать преимущества класса java.time. Рассмотрим изящный метод форматирования даты:

Java
Скопировать код
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.

Значимость модульного тестирования

Модульное тестирование играет ключевую роль в проверке правильной работы кода форматирования дат. В качестве примера модульного теста можно рассмотреть следующий код:

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 можно представить в виде картографического процесса создания карты ординальных числительных:

Markdown
Скопировать код
Карта дней: 1-ое 📍, 2-ое 📍, 3-ое 📍, 4-ое... [и до]... 31-ое 📍

Formatter ведет себя как искусный картограф, размещая метки на карте вашего календаря:

Java
Скопировать код
String formattedDay = new Formatter().format("%1$te%1$ts", date).toString();

Каждый день помечается соответствующим образом:

Markdown
Скопировать код
| День | Отметка |
| ---- | ------- |
| 1    | ое      |
| 2    | ое      |
| 3    | ое      |
| 4-20 | ое      |
| 21   | ое      |
| ...  | ...     |
| 31   | ое      |

В итоге получаем карту, где каждая дата обозначена соответствующим ординальным числительным.

Полезные материалы

  1. DateTimeFormatter (Java Platform SE 8) — для создания собственных форматов даты.
  2. ICU User Guide | ICU Documentation — подробное руководство по форматированию чисел.
  3. StringUtils (Apache Commons Lang 3.11) — полезные функции для работы со строками.
  4. Joda-Time – Java date — хорошая альтернатива SimpleDateFormat.
  5. Java – Дата и время — обучающий курс по работе с датой и временем в Java.

В этом списке представлены как исчерпывающие документации, так и практические учебные материалы для работы с датами в Java.

Свежие материалы