You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将毫秒数转换为易读时间间隔?FTL模板实现咨询

FreeMarker毫秒数转易读时长字符串方案

无需自定义转换器的原生实现

FreeMarker没有直接处理时长毫秒数的内置函数,但可以通过数学计算+条件拼接实现需求,无需额外编写Java代码:

<#-- 转换为总秒数 -->
<#assign totalSeconds = millisecondsSpent / 1000>
<#-- 拆分出小时、分钟、秒 -->
<#assign hours = (totalSeconds / 3600)?int>
<#assign remainingSecs = totalSeconds % 3600>
<#assign minutes = (remainingSecs / 60)?int>
<#assign seconds = remainingSecs % 60?int>

<#-- 收集非零的时长部分 -->
<#assign durationSegments = []>
<#if hours > 0>
    <#assign durationSegments += ["${hours}小时"]>
</#if>
<#if minutes > 0>
    <#assign durationSegments += ["${minutes}分钟"]>
</#if>
<#-- 兜底显示秒,避免空结果 -->
<#if seconds > 0 || durationSegments?size == 0>
    <#assign durationSegments += ["${seconds}秒"]>
</#if>

<#-- 拼接为最终字符串 -->
${durationSegments?join(",")}

自定义Java转换器(复用性更强)

如果需要在多个模板中复用该逻辑,自定义转换器是更优雅的方案:

  • 实现FreeMarker的TemplateMethodModelEx接口,在exec方法中编写毫秒转时长的逻辑
  • 将转换器注册到FreeMarker配置的共享变量中
  • 在FTL中直接调用,示例:${formatDuration(millisecondsSpent)}

额外说明

  • 原生实现会自动忽略数值为0的时长部分,比如仅耗时45秒时,只会显示“45秒”
  • 可根据需求调整拼接分隔符(比如把“,”改成“、”)或单位表述

内容的提问来源于stack exchange,提问作者Lukáš Petrovický

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 20:51:13