转换日期 Freemarker

Converting Dates Freemarker

我正在尝试使以下内容正常工作,但无法显示正确的值。

假设 SHIPPING_DATE 被视为值为 2016/05/23 的字符串:

<#setting date_format="MM/dd/yyyy">
<#setting locale="en_US">

<#assign ship_date>${SHIPPING_DATE}</#assign>

${ship_date?date("MM/dd/yyyy")}

输出是 12/05/0190 但我期待 05/23/2016。请有人帮忙解释一下我做错了什么吗?

如果您在 ship_date 中有一个 字符串,例如 2016/05/23,那么您可以使用 ship_date?date("yyyy/MM/dd") 将其解析为实际日期值。请注意,它不是您示例中的 MM/dd/yyyy?date 表示 "convert to date",您指定它如何解释字符串。然后,当您使用 ${...} 打印一个真实的日期值(不是字符串)时,它将根据 data_format 配置设置转换为字符串,因此 MM/dd/yyyy 会很好。获取实际日期值的方式并不重要(例如使用 string?date(format) 或直接从数据模型获取)。

template.ftl

<#list listaCategoria as c>
   <tr>
      <td> ${c.dataCadastro?datetime("yyyy-MM-dd")?string("dd/MM/yyyy")}</td>
   </tr>
</#list>

RelatorioService.java

LocalDate dataCadastro = LocalDate.of(1995, 12, 7);

结果:

07/12/1995