我正在尝试在Thymeleaf中使用语言环境格式化日期,我已经使用了dates.format
<td th:text="${#dates.format(embargo.fecha, 'dd-MMMM-yyyy', new Locale('es'))}"></td>
<td th:text="${#dates.format(embargo.fecha, 'dd-MMMM-yyyy',${ new Locale('es')})}"></td>
但以上方法均无效。
我基于这个已经解决的问题 https://github.com/thymeleaf/thymeleaf-extras-java8time/pull/6
答案 0 :(得分:0)
由于您将Thymeleaf与Spring Boot结合使用,因此表达式为SpEL(Spring表达式语言),而documentation表示:
您可以使用
new
运算符来调用构造函数。对于原始类型(int
,float
等)和String
以外的所有类型,您应该使用完全限定的类名。
因此,您需要使用new java.util.Locale('es')
而不是new Locale('es')
答案 1 :(得分:0)
我偶然发现了与您相同的问题。
不起作用的原因是因为您需要使用#temporals
而不是#dates
。
为此,您需要将 thymeleaf-extras-java8time 依赖项添加到您的项目中:
compile("org.thymeleaf.extras:thymeleaf-extras-java8time:3.0.4.RELEASE")
请记住,语言环境功能是在版本2.1.0发布后添加的,因此您必须使用Thymeleaf3。添加:
compile("org.thymeleaf:thymeleaf-spring4:3.0.6.RELEASE")
compile("org.thymeleaf:thymeleaf:3.0.6.RELEASE")
compile("nz.net.ultraq.thymeleaf:thymeleaf-layout-dialect:2.2.2")
正如@Andreas指出的那样,您需要指定整个程序包名称,例如:
<td th:text="${#temporals.format(embargo.fecha, 'dd-MMMM-yyyy', new java.util.Locale('es', 'ES'))}"></td>
还要注意,#temporals
与 java.util.Dates 不兼容,而与 java.time.LocalDate 和 java兼容。 time.LocalDateTime
如果您无法将后端更改为使用 java.time.LocalDate ,则解决方案是使用静态方法从您 java.util.Date 创建它of(year, month, day)
来自 LocalDate 类。
例如:
T(java.time.LocalDate).of(#dates.year(embargo.fecha), #dates.month(embargo.fecha), #dates.day(embargo.fecha))
将其放入您的示例中,它将变成:
<td th:text="${#temporals.format(T(java.time.LocalDate).of(#dates.year(embargo.fecha), #dates.month(embargo.fecha), #dates.day(embargo.fecha)), 'dd-MMMM-yyyy', new java.util.Locale('es', 'ES'))}"></td>
希望有帮助!
答案 2 :(得分:-1)
尝试使用以下格式:
<td th:text="${#dates.format(embargo.fecha, 'EEEE, dd-MMMM-yyyy', new Locale('es'))}"></td>