Freemarker 格式整数作为分钟和秒

Freemarker format integer as minutes and seconds

我有一个整数值,表示以秒为单位的时间跨度,我会将其格式化为分钟和秒: 示例:我有一个整数 durationInSeconds = 341 并希望它显示为 05:41.

我能找到的格式化日期的唯一方法是格式化日期,但我没有日期 - 我有一个整数

这个有效:

${.now?date?string("mm:ss")}

它会输出当前的分秒,例如46:50

这行不通:

${durationSeconds?date?string("mm:ss")}

它给我一个错误:

Unparseable date: "341"

有没有简单的方法 convert/format 整数值?

数字可以通过 ?number_to_date/?number_to_time/?number_to_datetime 转换为 date/time/datetime,但它们不是您想要的,因为它们将输入解释为经过的毫秒数自纪元以来,加上格式将计入您的时区。但是你在这里有一个持续时间,而不是一个瞬间。因此,您可以简单地这样做:

${(durationSeconds / 60)?int}:${durationSeconds % 60}

当然如果你在多个地方都需要这个,那么你可以为此定义一个#macro(那么它就像<@duration durationSeconds />),或者为此定义一个自定义数字格式(然后就像 ${durationSeconds?string.@duration}).