【问题标题】:Converting Dates Freemarker转换日期 Freemarker
【发布时间】:2016-11-09 04:35:57
【问题描述】:

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

假设 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。请有人帮忙,但也解释一下我做错了什么?

【问题讨论】:

  • 小幅修正:* ${SHIPPING_DATE}#assign>
  • 或者只是&lt;#assign ship_date = SHIPPING_DATE&gt;,因为SHIPPING_DATE 已经是一个字符串。这反过来又使整个任务变得不必要......

标签: freemarker date-formatting


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 这成功了!感谢您的帮助和解释。我误解了 ?date 函数。我没有意识到这是在说“这是一个约会”,我想我需要一些额外的东西来转换。这很有帮助。
    • 通常,? 之后的名词和形容词的意思是“to ”。就像?upper_case 表示“转大写”,?string 表示“转字符串”。而且,您应该接受答案(添加复选标记)。
    猜你喜欢
    • 2018-04-20
    • 2013-11-18
    • 2020-08-02
    • 1970-01-01
    • 2016-05-06
    • 2011-02-06
    • 2015-03-07
    • 1970-01-01
    • 2010-11-25
    相关资源
    最近更新 更多