Используйте DateFormat.SHORT в Thymeleaf - PullRequest
0 голосов
/ 19 сентября 2018

Я хочу отформатировать Instant, используя предопределенный формат Java.Я могу сделать это в Java:

DateFormat dateFormat = DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.SHORT, request.getLocale());
// this will hopefully format a Date to 12.09.2018 02:10

И я хочу, чтобы это было сделано в Thymeleaf, используя мой тип Instant:

<div th:text="${#temporals.format(work.indexTime)}"></div>
<!-- this will print "2018-09-12T02:10:06Z" -->

Но как я могу сказать Thymeleaf использоватьDateFormat.SHORT настройки?

РЕДАКТИРОВАТЬ:

Мой текущий обходной путь заключается в следующем:

Контроллер:

DateTimeFormatter dateFormatter = DateTimeFormatter
        .ofLocalizedDateTime(FormatStyle.SHORT)
        .withLocale(request.getLocale())
        .withZone(ZoneId.systemDefault());

Шаблон:

<div th:text="${dateFormatter.format(work.indexTime)}"></div>

Ответы [ 2 ]

0 голосов
/ 20 июня 2019

Вы можете просто указать SHORT в качестве формата.

<div th:text="${#temporals.format(work.indexTime, 'SHORT')}"></div>

С README :

/*
 * Format date with the specified pattern
 * SHORT, MEDIUM, LONG and FULL can also be specified to used the default java.time.format.FormatStyle patterns
 * Also works with arrays, lists or sets
 */
0 голосов
/ 19 сентября 2018

Да, вы можете установить это в тимелист, но это довольно многословно ... это работает для меня:

<th:block th:with="clazz=${T(java.time.format.DateTimeFormatter)},
          style=${T(java.time.format.FormatStyle).SHORT},
          zone=${T(java.time.ZoneId).systemDefault()},
          formatter=${clazz.ofLocalizedDateTime(style).withLocale(#locale).withZone(zone)}">
    <span th:text="${formatter.format(work.indexTime)}" />
</th:block>

Вы также можете добавить конвертер по умолчанию из Instant в String и использовать двойную скобкусинтаксис при выводе Instant:

Контекст:

public class Context extends WebMvcConfigurerAdapter {
    @Override
    public void addFormatters(FormatterRegistry r) {
        DateTimeFormatter dateFormatter = DateTimeFormatter
                .ofLocalizedDateTime(FormatStyle.SHORT)
                .withLocale(LocaleContextHolder.getLocale())
                .withZone(ZoneId.systemDefault());

        r.addConverter(new Converter<Instant, String>() {
            @Override
            public String convert(Instant s) {
                return s != null ? dateFormatter.format(s) : "";
            }
        });
    }
}

HTML:

<div th:text="${{work.indexTime}}" />
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...