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

Spring CRUD应用中Thymeleaf转换String日期格式报错求助

解决方案

方法1:使用Thymeleaf的#temporals工具类(推荐)

Thymeleaf的#dates工具类确实没有parse(String, String)方法,你需要使用针对Java 8+时间API的#temporals工具类来处理字符串格式的日期转换:

<p><strong>Contracted From:</strong>
    <a th:text="${#temporals.format(#temporals.parse(employee.contractedFrom, 'yyyy-MM-dd'), 'dd-MMM-yyyy')}"></a>
</p>

注意:

  • Spring Boot项目默认已包含Thymeleaf的Java 8扩展,无需额外依赖
  • 如果需要强制显示英文月份缩写,可在格式化时指定Locale:
<a th:text="${#temporals.format(#temporals.parse(employee.contractedFrom, 'yyyy-MM-dd'), 'dd-MMM-yyyy', new java.util.Locale('en'))}"></a>

方法2:在实体类中添加格式化字段的getter

如果不想在模板中写复杂表达式,可在Employee实体类中添加自定义getter,直接返回格式化后的字符串:

import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.Locale;

// 实体类原有代码...
public String getFormattedContractedFrom() {
    if (contractedFrom == null) {
        return "";
    }
    DateTimeFormatter inputFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
    DateTimeFormatter outputFormatter = DateTimeFormatter.ofPattern("dd-MMM-yyyy", Locale.ENGLISH);
    LocalDate date = LocalDate.parse(contractedFrom, inputFormatter);
    return outputFormatter.format(date);
}

之后在模板中直接调用该getter:

<p><strong>Contracted From:</strong>
    <a th:text="${employee.formattedContractedFrom}"></a>
</p>

错误原因说明

你遇到的EL1004E错误,是因为org.thymeleaf.expression.Dates类确实没有parse(String, String)方法——它的parse方法仅支持java.util.Date相关的输入转换。而#temporals是专门为Java 8的java.time包设计的工具类,支持字符串到日期对象的解析操作。

内容的提问来源于stack exchange,提问作者Kayd Anderson

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 01:35:24