You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Thymeleaf的th:block中格式化日期?遇SpEL异常求助

解决Thymeleaf中th:block格式化日期的问题

错误原因分析

  1. 第一次尝试的异常:#temporals.format方法仅支持Java 8+的日期/时间对象(如LocalDate、LocalDateTime),但你的invoice.due是字符串类型(直接用<p th:text="${invoice.due}">能正常显示字符串),导致工具类无法调用方法,抛出空上下文对象异常。
  2. 第二次尝试的错误:在Thymeleaf的EL表达式中,不需要用|${}|嵌套变量,这属于语法错误,导致表达式解析失败。

正确解决方案

方案1:字符串类型日期转成日期对象后格式化

如果后端传递的invoice.due是字符串(格式为yyyy-MM-dd),先通过#temporals.parse将其转为LocalDate,再进行格式化:

<div class="date">Due Date: 
    <th:block th:text="${#temporals.format(#temporals.parse(invoice.due, 'yyyy-MM-dd'), 'yyyy-MM-dd')}"></th:block>
</div>

如果需要修改显示格式,只需替换第二个参数的格式字符串即可(比如'MM/dd/yyyy')。

方案2:后端传递Java 8日期类型(推荐)

将后端invoice.due的类型从String改为LocalDate,此时可直接使用#temporals.format:

<div class="date">Due Date: 
    <th:block th:text="${#temporals.format(invoice.due, 'yyyy-MM-dd')}"></th:block>
</div>

Spring Boot项目中,spring-boot-starter-thymeleaf已默认包含Java 8日期处理依赖,无需额外引入。

内容的提问来源于stack exchange,提问作者robert trudel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 14:24:19