54 votes

Formatage de la date dans Thymeleaf

Je suis tout nouveau dans le domaine de Java/Spring/Thymeleaf, alors soyez indulgent avec mon niveau de compréhension actuel. J'ai passé en revue cette question similaire mais n'a pas réussi à résoudre mon problème.

J'essaie d'obtenir une date simplifiée au lieu du format de date long.

// DateTimeFormat annotation on the method that's calling the DB to get date.
@DateTimeFormat(pattern="dd-MMM-YYYY")
public Date getReleaseDate() {
    return releaseDate;
}

html :

<table>
    <tr th:each="sprint : ${sprints}">
        <td th:text="${sprint.name}"></td>
        <td th:text="${sprint.releaseDate}"></td>
    </tr>
</table>

Sortie de courant

sprint1 2016-10-04 14:10:42.183

108voto

DimaSan Points 6296

La validation des haricots n'a pas d'importance, vous devez utiliser le formatage Thymeleaf :

<td th:text="${#dates.format(sprint.releaseDate, 'dd-MMM-yyyy')}"></td>

Assurez-vous également que votre releaseDate la propriété est java.util.Date .

La sortie sera comme : 04-Oct-2016

40 votes

Je vais juste laisser ceci ici : Si vous utilisez LocalDate ou LocalDateTime, utilisez "temporals" au lieu de "dates" dans Thymeleaf.

0 votes

De même, si vous souhaitez spécifier une locale personnalisée, vous devez la référencer sous la forme d'une expression OGNL ( commons.apache.org/proper/commons-ognl/language-guide.html ), new java.util.Locale('en', 'US') o @java.util.Locale@ENGLISH

23voto

Metroids Points 6776

Si vous voulez utiliser des convertisseurs dans les attributs th:text, vous devez utiliser la syntaxe des doubles crochets.

<td th:text="${{sprint.releaseDate}}"></td>

(Ils sont automatiquement appliqués aux attributs de th:field)

http://www.thymeleaf.org/doc/tutorials/2.1/thymeleafspring.html#double-bracket-syntax

0 votes

Existe-t-il un moyen de configurer le format utilisé par le convertisseur de double parenthèse ?

1 votes

@DavidTroyer cela fonctionne avec à peu près n'importe quelle façon dont vous feriez normalement cela -- vous pouvez utiliser la fonction @DateTimeFormat (tout comme la question), vous pouvez avoir votre @Configuration étendre la classe WebMvcConfigurerAdapter et surchargez addFormatters pour ajouter un fichier Converter<Date, String> etc...

0 votes

Belle réponse pour l'internationalisation. La vue ne dépend pas de la locale.

15voto

David Gonzalez Points 341

Si vous voulez montrer por exemple = 20-11-2017

Vous pouvez utiliser :

 th:text="${#temporals.format(notice.date,'dd-MM-yyyy')}

6 votes

Remarque - temporals ne prend en charge que l'API de temps de java 8 (pas l'API standard de java.util.Date). Afin d'utiliser cette fonctionnalité, vous devez ajouter l'option thymeleaf-extras-java8time dépendance.

3 votes

spring-boot-starter-thymeleaf comprend déjà thymeleaf-extras-java8time .

3voto

En ce qui concerne les dépendances,

<dependency>
    <groupId>org.thymeleaf</groupId>
    <artifactId>thymeleaf</artifactId>
    <version>3.0.12.RELEASE</version>
</dependency>
<dependency>
    <groupId>org.thymeleaf</groupId>
    <artifactId>thymeleaf-spring5</artifactId>
    <version>3.0.12.RELEASE</version>
</dependency>

Si vous utilisez LocalDate , LocalDateTime ou toute autre classe du nouveau paquet Java 8 Date, vous devez ajouter cette dépendance supplémentaire,

<dependency>
    <groupId>org.thymeleaf.extras</groupId>
    <artifactId>thymeleaf-extras-java8time</artifactId>
    <version>3.0.4.RELEASE</version>
</dependency>

En ce qui concerne le type de votre objet date, si vous utilisez Date ,

<td th:text="${#dates.format(sprint.releaseDate, 'dd-MM-yyyy HH:mm')}">30-12-2021 23:59</td>

Si vous utilisez LocalDate o LocalDateTime ,

<td th:text="${#temporals.format(sprint.releaseDate, 'dd-MM-yyyy HH:mm')}">30-12-2021 23:59</td>

Il est toujours possible de passer un objet de type DateTimeFormatter dans les propriétés de votre modèle

// Inside your controller
context.setVariable("df", DateTimeFormatter.ofPattern("dd-MM-yyyy HH:mm"));
// or
model.addAttribute("df", DateTimeFormatter.ofPattern("dd-MM-yyyy HH:mm"));

// Then, in your template
<td th:text="${df.format(sprint.releaseDate)}">30-12-2021 23:59</td>

Cet article peut vous aider davantage.

3voto

Amit Points 663

Vous devez utiliser le formatage de Thymeleaf en millisecondes

<td th:text="${#dates.format(new java.util.Date(transaction.documentDate), 'dd-MMM-yy')}"></td>

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X