<#assign createdOn='${receipt.arPaymDate}'>
${createdOn?datetime("MMM dd yyyy HH:mm:ss 'GMT'Z")?date}
但我正处于执行之下
无法将类似日期的值转换为字符串,因为它不知道是否已知 它是一个日期(没有时间部分),时间或日期时间值。归咎于 表达式:==&gt; receipt.arPaymDate [在模板中 &#34; WEB-INF / FTL / receiptPdf.ftl&#34;在第22行,第47栏
感谢advened
答案 0 :(得分: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
答案 1 :(得分:0)
这取决于receipt.arPaymDate
的类型。
在任何情况下,你都不应该写<#assign createdOn='${receipt.arPaymDate}'>
,而是<#assign createdOn=receipt.arPaymDate>
,因为前者将receipt.arPaymDate
转换为字符串(当你在那里插入一个空字符串时),即使它已经是java.util.Date
。如果它是String
,那么它什么都不做,所以它是不必要的冗长。
如果receipt.arPaymDate
是java.util.Date
,并且您在没有'${...}'
的情况下执行作业,那么您不需要?datetime(...)
部分,只需要{{1} }} 第1部分}}。 (如果?date
是${createdOn?date}
,即使?date
也可以省略,因为已知只存储日期部分,而不是时间。)
如果receipt.arPaymDate
是一个字符串,那么你必须解析它到目前为止,你可以写java.sql.Date
。模式具有时间部分不是问题,receipt.arPaymDate
仍会将结果标记为仅限日期的值。
此外,如果不清楚,此示例中的分配是不必要的。人们可以写${createdOn?date("MMM dd yyyy HH:mm:ss 'GMT'Z")}
。