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 中使用 NetSuite 日期

如何在 freemarker 语言中将当前日期格式(YYYY-MM-DD HH:MM:SS)转换为(YYMMDD)格式

在 Netsuite Advanced PDF 模板中使用 Freemarker 语法进行日期翻译

显示日期 - 长格式的三天减去 Freemarker 中的年份

freemarker 按日期排序;需要更改日期格式

freemark得到当前日期之前一个月有啥函数