我有一个 java Duration 对象,其格式应为 xml 中的
hh:mm:ss
。
<Duration>${duration}</Duration>
但它是用标准格式渲染的。
<Duration>PT30S</Duration>
我在java中有一个可以格式化持续时间的方法,它目前用于json映射。
public static String format(Duration value) {
long hours = value.toHours();
int minutes = value.toMinutesPart();
int seconds = value.toSecondsPart();
int millis = value.toMillisPart();
return millis == 0
? String.format("%02d:%02d:%02d", hours, minutes, seconds)
: String.format("%02d:%02d:%02d.%03d", hours, minutes, seconds, millis);
}
我还需要在 freemarker 中渲染 Duration。是否可以在 freemarker 中使用相同的方法?
从 FreeMarker 2.3.32 开始,任何 Java 8 时态类都没有内置格式。 (虽然有一个开发分支具有半完成的实现,但甚至还没有解决
Duration
。)
但是,您当然可以从 FreeMarker 调用静态实用方法。您必须将其值放入数据模型(模板上下文)中,并使用您喜欢的名称(如本例中的
MyUtils
)((BeansWrapper) cfg.getObjectWrapper()).getStaticModels().get(MyUtils.class.getName())
,其中 cfg
是 FreeMarker Configuration
单例。