【问题标题】:Date formatting Issue in freemarker templatefreemarker模板中的日期格式问题
【发布时间】: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”

请告诉我如何从给定的输入中解析为我的预期日期时间格式?

【问题讨论】:

    标签: java datetime templates freemarker smooks


    【解决方案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 我认为最好的来源是官方文档......并在 Stackoverflow 上搜索。此外,您应该接受答案(单击复选标记)。
    猜你喜欢
    • 2015-01-15
    • 1970-01-01
    • 1970-01-01
    • 2011-08-29
    • 1970-01-01
    • 2015-03-07
    • 1970-01-01
    • 1970-01-01
    • 2014-10-11
    相关资源
    最近更新 更多