【问题标题】:Freemarker model convert timestamp in milliseconds to dateFreemarker 模型以毫秒为单位将时间戳转换为日期
【发布时间】:2011-10-21 07:11:07
【问题描述】:

我有一个 csv 文件,我想用 fmpp(freemarker)对其进行转换。第一列是一个长值(自 1.1.1970 以来的毫秒数),我想将其转换为日期并将其格式化为日期时间。

src 格式:

timeStamp,elapsed,label,responseCode,threadName,dataType,success,bytes,URL,Latency
1319115474244,40142,Login,200,Login 1-2,text,true,862184,http://localhost:8080/xxx,5378

理想的目标格式:

timeStamp;elapsed;label;responseCode;threadName;dataType;success;bytes;URL;Latency
20.12.2011 13:45;40142;Login;200;Login 1-2;text;true;862184;http://localhost:8080/xxx;5378

我的(正在运行的)模板:

<#list csv.headers as h>${h}<#if h_has_next>;</#if></#list>
<#list csv as row>
<#list csv.headers as h><#if h_index == 0>Do the date magic<#else>${(row[h]!"N/A")?string}</#if>$<#if h_has_next>;</#if></#list>
</#list>

对于第 0 列,我想进行转换。我不想写一个包含日期的新模型。我的问题是,这可以在模板中完成而不修改 freemarker 或 fmpp。

有什么想法吗?

【问题讨论】:

    标签: java freemarker fmpp


    【解决方案1】:

    FreeMarker 2.3.17 为此引入了?number_to_date?number_to_time?number_to_datetime。见:http://freemarker.org/docs/ref_builtins_expert.html#ref_builtin_numToDate

    您还需要设置日期/时间格式和区域;见http://fmpp.sourceforge.net/settings.html#sect17

    您可能必须在 FMPP 中升级 FreeMarker。为此,只需将&lt;FMPP_HOME&gt;/lib/freemarker.jar 替换为最新版本即可。

    【讨论】:

    • 谢谢!我必须在文档中对此进行了监督。给别人的一个提示。您必须先将字符串转换为数字,然后再转换为日期时间,如下所示: ${(row[h])?number?number_to_datetime} 。输出的日期时间格式可以设置为:
    • 谢谢!在“很少使用和专家内置”部分,可以准确地说这些信息被埋没了。非常感谢!
    • @MaxRocket 是的,该部分的大部分内容可能应该在其他部分中解散......
    【解决方案2】:

    在我的情况下,我使用这个:

    ${(timeStamp)?number_to_date?string("yyyy.MM.dd")}

    并将number_to_date替换为number_to_datetimenumber_to_time

    您可以根据需要将yyyy.MM.dd 替换为YYYY-MM-dd HH:mm:ss

    检查这个: http://freemarker.org/docs/ref_builtins_expert.html#ref_builtin_numToDate

    【讨论】:

      猜你喜欢
      • 2021-09-29
      • 1970-01-01
      • 2017-05-28
      • 1970-01-01
      • 2022-11-27
      • 2016-04-22
      • 1970-01-01
      • 2020-06-24
      • 2015-06-17
      相关资源
      最近更新 更多