Рубрики
Без рубрики

Как работать с датами в Thymeleaf

Краткое и практическое руководство по работе с датами в Thymeleaf

Автор оригинала: baeldung.

1. введение

Thymeleaf – это движок шаблонов Java, предназначенный для работы непосредственно с Spring. Для введения в Thymeleaf и Spring взгляните на эту запись .

Помимо этих основных функций, Thymeleaf предлагает нам набор служебных объектов, которые помогут нам выполнять общие задачи в нашем приложении.

В этой статье мы обсудим обработку и форматирование новых и старых классов Java Date с несколькими функциями Thymeleaf 3.0.

2. Зависимости Maven

Во-первых, давайте посмотрим конфигурацию, необходимую для интеграции Thymeleaf с Spring в ваш pom.xml :


    org.thymeleaf
    thymeleaf
    3.0.11.RELEASE


    org.thymeleaf
    thymeleaf-spring5
    3.0.11.RELEASE

Последние версии thymeleaf и thymeleaf-spring 5 можно найти на Maven Central. Обратите внимание, что для проекта Spring 4 библиотека thymeleaf-spring4 должна использоваться вместо thymeleaf-spring 5 .

Кроме того, для работы с новыми классами Java 8 Date мы добавим в ваш следующую зависимость pom.xml :


    org.thymeleaf.extras
    thymeleaf-extras-java8time
    3.0.4.RELEASE

thymeleaf extras – это дополнительный модуль, полностью поддерживаемый официальной командой Thymeleaf, который был создан для совместимости с Java 8 Time API. Он добавляет объект # temporals в Контекст в качестве процессора служебных объектов во время оценки выражений. Это означает, что его можно использовать для оценки выражений в языке навигации объектных графов (OGNL) и языке выражений Spring (SpringEL).

3. Старое и новое: java.util и java.time

Пакет Time – это новый API даты, времени и календаря для платформы Java SE. Основное различие между старым наследием Data и заключается в том, что новый API различает машинные и человеческие представления временной шкалы. Машинное представление показывает последовательность интегральных значений относительно эпохи, в то время как представление показывает набор полей (например, год или день).

Для работы с новым пакетом Time нам необходимо настроить механизм шаблонов для использования нового диалекта Java 8 Time/|:

private ISpringTemplateEngine templateEngine(ITemplateResolver templateResolver) {
    SpringTemplateEngine engine = new SpringTemplateEngine();
    engine.addDialect(new Java8TimeDialect());
    engine.setTemplateResolver(templateResolver);
    return engine;
}

Это добавит объект # temporals , аналогичный объектам в стандартном диалекте, что позволит форматировать и создавать объекты Temporals из шаблонов Thymeleaf.

Чтобы проверить обработку новых и старых классов, мы создадим следующие переменные и добавим их в качестве объектов модели в наш класс контроллера:

model.addAttribute("standardDate", new Date());
model.addAttribute("localDateTime", LocalDateTime.now());
model.addAttribute("localDate", LocalDate.now());
model.addAttribute("timestamp", Instant.now());

Теперь мы готовы использовать Выражение и Временные | Служебные объекты , предоставленные Thymeleaf.

3.1. Форматирование Дат

Первая функция, которую мы хотим охватить, – это форматирование объекта Date (который добавляется к параметрам модели Spring). Мы решили использовать формат ISO8601 :

Format ISO

Независимо от того, как наша Дата была установлена на внутренней стороне, она будет отображаться в соответствии с выбранным стандартом. стандартная дата будет обработана утилитой # dates . Новые классы LocalDateTime, | LocalDate и Instant будут обрабатываться утилитой # temporals . Это конечный результат, который мы увидим в браузере:

Это конечный результат, который мы увидим в браузере:

Более того, если мы хотим установить формат вручную, мы можем сделать это с помощью:

Format manually

Как мы можем наблюдать, мы не можем обработать класс Instant с помощью # temporals.format(…) — это приведет к исключению UnsupportedTemporalTypeException . Кроме того, форматирование Локальных данных возможно только в том случае, если мы будем указывать только конкретные поля данных, пропуская поля времени.

Конечный результат:

3.2. Получение Конкретных Полей Даты

Для того, чтобы получить конкретные поля java.util.Date class, мы должны использовать следующие служебные объекты:

${#dates.day(date)}
${#dates.month(date)}
${#dates.monthName(date)}
${#dates.monthNameShort(date)}
${#dates.year(date)}
${#dates.dayOfWeek(date)}
${#dates.dayOfWeekName(date)}
${#dates.dayOfWeekNameShort(date)}
${#dates.hour(date)}
${#dates.minute(date)}
${#dates.second(date)}
${#dates.millisecond(date)}

Для нового пакета java.time мы должны придерживаться # temporals utilities:

${#temporals.day(date)}
${#temporals.month(date)}
${#temporals.monthName(date)}
${#temporals.monthNameShort(date)}
${#temporals.year(date)}
${#temporals.dayOfWeek(date)}
${#temporals.dayOfWeekName(date)}
${#temporals.dayOfWeekNameShort(date)}
${#temporals.hour(date)}
${#temporals.minute(date)}
${#temporals.second(date)}
${#temporals.millisecond(date)}

Давайте рассмотрим несколько примеров. Во-первых, давайте покажем сегодняшний день недели:

Show only which day of a week

Далее, давайте покажем название дня недели:

Show the name of the week day

И, наконец, давайте покажем текущую секунду дня:

Show the second of the day

Обратите внимание, что для работы с частями времени вам нужно будет использовать LocalDateTime , так как Локальные данные выдадут ошибку.

4. Заключение

В этом кратком руководстве мы обсудили функции обработки Java Data , реализованные в платформе Thymeleaf версии 3.0.

Полную реализацию этого руководства можно найти в проекте GitHub – это проект на основе Maven, который легко импортировать и запускать.

Как проверить? Наше предложение состоит в том, чтобы сначала поиграть с кодом в браузере, а затем проверить наши существующие тесты JUnit.

Пожалуйста, обратите внимание, что наши примеры не охватывают все доступные варианты в Thymeleaf. Если вы хотите узнать обо всех типах утилит, ознакомьтесь с нашей статьей, посвященной выражениям Spring и Thymeleaf .