【问题标题】:How to convert date to string in freemarker?如何在freemarker中将日期转换为字符串?
【发布时间】:2018-04-20 19:08:48
【问题描述】:

我是这样做的..

<#assign createdOn='${receipt.arPaymDate}'>
${createdOn?datetime("MMM dd yyyy HH:mm:ss 'GMT'Z")?date}

但我正在执行以下操作

无法将类似日期的值转换为字符串,因为不知道是否 它是日期(无时间部分)、时间或日期时间值。被指责的 表达式:==>receipt.arPaymDate [在模板中 “WEB-INF/ftl/receiptPdf.ftl”在第 22 行第 47 列]

谢谢你

【问题讨论】:

  • 这几乎不是示例中的错误消息,因为您使用的是?date,所以 FreeMarker 会知道它是一个仅限日期的值。
  • ${createdOn?datetime(...)} 期望 createdOnDate。但是,您已将其初始化为createdOn = '${...}',这使其成为String(用引号括起来的值)。试试&lt;#assign createdOn = receipt.arPaymDate /&gt;

标签: java freemarker


【解决方案1】:

你可能需要先初始化日期格式

<#setting date_format="dd-MM-yyyy">

<#assign createdOn='${receipt.arPaymDate}'> 
${createdOn?datetime("MMM dd yyyy HH:mm:ss 'GMT'Z")?date}

另见How to convert date in specific format in Freemarker template or javascript

【讨论】:

  • @wodong 谢谢,我做了一点修改,这对我来说很重要,谢谢
  • 这个答案有问题:在分配中不必要地使用'${...}',以及不必要地使用?datetime?date。但请看我的回答。
【解决方案2】:

这取决于receipt.arPaymDate是什么类型。

无论如何,你不应该写&lt;#assign createdOn='${receipt.arPaymDate}'&gt;,而应该写&lt;#assign createdOn=receipt.arPaymDate&gt;,因为前者会将receipt.arPaymDate转换成一个字符串(当你在那里插入一个空字符串时),即使它已经是一个@987654325 @。如果它是String,那么它什么也不做,所以它是不必要的冗长。

如果receipt.arPaymDatejava.util.Date,并且您在没有'${...}' 的情况下进行分配,则不需要?datetime(...) 部分,只需要?date 部分:${createdOn?date}。 (如果receipt.arPaymDatejava.sql.Date,则即使?date 也可以省略,因为已知它只存储日期部分,而不是时间。)

如果receipt.arPaymDate是一个字符串,所以你必须解析它到日期,你可以写${createdOn?date("MMM dd yyyy HH:mm:ss 'GMT'Z")}。模式有时间部分不是问题,?date 仍会将结果标记为仅日期值。

此外,如果不清楚,本示例中的分配是不必要的。可以写${receipt.arPaymDate?date}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-05-24
    • 2016-05-27
    • 1970-01-01
    • 2017-06-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多