在 Freemarker 中将秒数转换为 ISO8601 持续时间

Convert seconds to ISO8601 duration in Freemarker

如何在 Freemarker 中将秒数转换为 ISO 8601 Duration

例如。 140 秒 -> PT2M20S

这里有没有什么freemarker builtin可以派上用场的?还是字符串操作?

没有(截至 2.3.28)。您将不得不为它编写 #function 或 Java 方法或 TemplateMethodModelEx。 (顺便说一句,我相信它会 PT2M20S。)

我最终添加了这个功能:

<#function convertDurationSeconds seconds>
    <#local mins = (seconds/60)?int />
    <#local seconds = (seconds%60) />
    <#return 'PT' + (mins > 0)?then(mins + 'M','') + (seconds > 0)?then(seconds + 'S','') />
</#function>

注意:我只需要分钟和秒,因为它用于短视频持续时间,此函数可以扩展以表示其他时间间隔(Y、M(月)、W、D、M 和 S)