如何在Thymeleaf中将Dates.Format与语言环境一起使用

时间:2019-03-19 16:12:18

标签: java spring spring-boot thymeleaf

我正在尝试在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

3 个答案:

答案 0 :(得分:0)

由于您将Thymeleaf与Spring Boot结合使用,因此表达式为SpEL(Spring表达式语言),而documentation表示:

  

您可以使用new运算符来调用构造函数。对于原始类型(intfloat等)和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>