freemarker模板中的日期格式问题
Posted
技术标签:
【中文标题】freemarker模板中的日期格式问题【英文标题】:Date formatting Issue in freemarker template 【发布时间】:2019-02-17 12:31:59 【问题描述】:我的日期输入为 "20170101"(YYYYMMDD) ,我只需编写 freemarker 模板即可将上述日期转换或格式化为 "2017-01-01 00:00:00" (YYYY-MM-DD HH: MM:SS) 作为日期时间格式。
我试过了
<#assign createdOn = '20170101'> Dates="$createdOn?datetime("MMM dd yyyy HH:mm:ss")?date
但它返回错误为“字符串与预期的日期/时间/日期时间格式不匹配。要解析的字符串是:“20170101”。预期的格式是:“MMM dd yyyy HH:mm:ss ”。 给出的嵌套原因如下: 无法解析的日期:“20170101”
请告诉我如何从给定的输入中解析为我的预期日期时间格式?
【问题讨论】:
【参考方案1】:如果您的输入是"20170101"
,那么预期格式是"YYYYMMDD"
。
所以将"MMM dd yyyy HH:mm:ss"
替换为"yyyyMMdd"
。
【讨论】:
嗨eugenioplima,我的预期格式不是你说的输入,输入是YYYYMMDD,预期是“2017-01-01 00:00:00”(YYYY-MM-DD HH:MM: SS),请提出合适的解决方案 @eugenioflima 格式其实是yyyyMMdd
(Java定义的SimpleDateFormat
)。
你是对的,@ddekany。我只关注输入值和预期格式之间的不匹配。你的答案很完美。【参考方案2】:
如果您有一个字符串(不是java.util.Date
),如您的示例所示,那么首先必须通过?date
/?datetime
?time
将其解析为Date
,您可以在其中提供格式字符串。 (考虑一下,如果未提供格式,则无法明确解析 20180102 之类的内容。)此时您只需打印该值,它将根据默认的datetime_format
(或date_format
等)格式化为 FreeMarker 配置。如果该格式不好,那么您可以使用?string(theFormatYouWant)
强制另一种格式。所以,在你的情况下:
<#assign createdOn = '20170101'>
Date="$createdOn?datetime("yyyyMMdd")?string("yyyy-MM-dd HH:mm:ss")
但同样,您通常不需要?string(...)
,而是在全局范围内配置您的首选格式。
【讨论】:
嗨ddekany,上面的代码确实很奇怪,你太棒了,,,非常感谢你的大力帮助,我只是想了解更多关于字符串和日期以及Freemarker模板的java函数集成,有没有可以参考的博客,如果有请分享一下...再次感谢.. @Naveen 我认为最好的来源是官方文档......并在 *** 上搜索。此外,您应该接受答案(单击复选标记)。以上是关于freemarker模板中的日期格式问题的主要内容,如果未能解决你的问题,请参考以下文章
如何在 freemarker 语言中将当前日期格式(YYYY-MM-DD HH:MM:SS)转换为(YYMMDD)格式
在 Netsuite Advanced PDF 模板中使用 Freemarker 语法进行日期翻译