Logo

Thymeleaf中处理日期的完整指南

作者

Thymeleaf是一个可以与Spring无缝集成的Java模板引擎。除了基本功能外,Thymeleaf还提供了一系列实用工具对象,可以帮助我们在应用中处理常见任务。

本文将讨论如何在Thymeleaf中处理和格式化新旧Java日期类,以及Thymeleaf 3.0的一些新特性。

2. Maven依赖

首先,我们需要在pom.xml中添加以下依赖:

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

注意:对于Spring 4项目,需要使用thymeleaf-spring4而不是thymeleaf-spring5。

为了使用Java 8的新日期类,还需要添加:

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

3. java.util和java.time

Java 8引入了新的日期时间API。主要区别在于新API区分了时间的机器视图和人类视图。

要使用新的Time包,需要配置模板引擎使用Java8TimeDialect:

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

这将添加#temporals对象,允许在Thymeleaf模板中格式化和创建Temporal对象。

3.1 格式化日期

我们可以使用以下方式格式化日期:

<h1>ISO格式</h1>
<p th:text="${#dates.formatISO(standardDate)}"></p>
<p th:text="${#temporals.formatISO(localDateTime)}"></p>

<h1>自定义格式</h1>  
<p th:text="${#dates.format(standardDate, 'yyyy-MM-dd HH:mm')}"></p>
<p th:text="${#temporals.format(localDateTime, 'yyyy-MM-dd HH:mm')}"></p>

3.2 获取特定日期字段

对于java.util.Date:

${#dates.day(date)}
${#dates.month(date)}
${#dates.year(date)}
...

对于java.time包:

${#temporals.day(date)}  
${#temporals.month(date)}
${#temporals.year(date)}
...

4. 在表单中使用日期选择器

我们可以这样在Thymeleaf表单中使用日期选择器:

<form th:action="@{/saveStudent}" method="post" th:object="${student}">
    <input type="date" th:field="${student.birthDate}"/>
    <button type="submit">提交</button>
</form>

控制器:

@PostMapping("/saveStudent")
public String saveStudent(Model model, @ModelAttribute Student student) {
    model.addAttribute("student", student);
    return "displayDate";  
}

显示页面:

<h1>学生生日</h1>
<p th:text="${#dates.format(student.birthDate, 'yyyy-MM-dd')}"></p>

5. 总结

本文介绍了Thymeleaf 3.0中处理Java日期的主要功能。完整代码可以在GitHub上找到。建议先在浏览器中测试代码,然后再编写单元测试。

分享内容