Freemarker:将日期从科学记数法转换为数字

Posted

技术标签:

【中文标题】Freemarker:将日期从科学记数法转换为数字【英文标题】:Freemarker: Convert date from Scientific Notation to a number 【发布时间】:2020-08-02 22:34:13 【问题描述】:

我是一个完整的 Freemarker 新手,我正在使用一个使用 freemarker 模板的框架。我正在尝试根据某个字段“日期”对哈希序列进行排序。

我的输入 json 如下所示:

"fields": [
                [
                    
                        "contentType": "application/json",
                        "date": 1.563457325E9,
                        "id": "abc",
                        "size": 0.0
                    ,
                    
                        "contentType": "application/json",
                        "date": 1.563426843E9,
                        "id": "def",
                        "size": 0.0
                    ,
                    
                        "contentType": "application/json",
                        "date": 1.563454092E9,
                        "id": "ghi",
                        "size": 0.0
                    ,
                    
                        "contentType": "application/json",
                        "date": 1.563425862E9,
                        "id": "jkl",
                        "size": 0.0
                    ,
                    
                        "contentType": "application/json",
                        "date": 1.563426128E9,
                        "id": "mno",
                        "size": 0.0
                    ,
                    
                        "contentType": "application/json",
                        "date": 1.563453696E9,
                        "id": "pqr",
                        "size": 0.0
                    ,
                    
                        "contentType": "application/json",
                        "date": 1.563426813E9,
                        "id": "stu",
                        "size": 0.0
                    ,
                    
                        "contentType": "application/json",
                        "date": 1.563426177E9,
                        "id": "vwx",
                        "size": 0.0
                    
                ]
            ]
        

当我尝试这样做时:<#assign j=fields[0].eval>,我收到以下错误:

“?eval”字符串失败,出现以下错误:---begin-message--- 语法 第 1 行第 55 列的 ?eval-ed 字符串中的错误:遇到“E9”,但是 期待以下之一:“..”“..”“”“”“。” "[" "(" “?” “!” “??” "+" "-" "" "/" "%" "!=" "=" "==" ">=" ">" ---end-message--- 失败的表达式:==> fields[0]?eval [in template "89-1070010335" at line 1, column 14] ---- FTL 堆栈跟踪(“~”表示嵌套相关)

我想做这样的事情:

<#assign j=fields[0]>
<#list j?sort_by("date") as i>
  $i.date: $i.id
</#list>

如何将日期字段从科学计数法转换为freemarker中的数字,然后根据该日期字段的值进行排序?

如果我能从Freemarker documentation note 获得一些指针或任何特定参考,我会很高兴。

【问题讨论】:

【参考方案1】:

由于数据模型包含嵌套列表,所以我们必须在模板中采用嵌套列表指令,如下所示。

  <#list fields as field>
    <#list field?sort_by("date") as innerField>
      $innerField.date?replace(",", "") : $innerField.id
    </#list>
    </#list>

sn-p 下面将科学记数法转换为数字。

<#assign scientificFormat = "1.563426177E9">
<#assign number = scientificFormat?number?replace(",", "")>
$number

来源:https://freemarker.apache.org/docs/ref_builtins_sequence.html

【讨论】:

输出:1563425862:jkl 1563426128:mno 1563426177:vwx 1563426813:stu 1563426843:def 1563453696:pqr 1563454092:ghi 请编辑您的答案以添加您的所有答案。此外,虽然这段代码可以解决问题,including an explanation 解决问题的方式和原因确实有助于提高您的帖子质量,并可能导致更多的赞成票。请记住,您正在为将来的读者回答问题,而不仅仅是现在提问的人。请编辑您的答案以添加解释并说明适用的限制和假设。

以上是关于Freemarker:将日期从科学记数法转换为数字的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 freemarker 将字符串转换为数字?

将科学记数法转换为日期时间

如何在freemarker中将日期转换为字符串?

如何在freemarker模板中将字符串转换为数字

FreeMarker 将带逗号的字符串转换为数字

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