Freemarker是否与JodaTime有任何集成?

And*_*ndy 3 datetime freemarker jodatime

有没有办法在Freemarker中轻松格式化Joda DateTime对象?例如,使用Java日期,我们可以使用?字符串和其他指令.

我知道我可以调用Date并获得Java Date,但我希望有更好的方法.

Jod*_*hen 9

您应该可以toString(String pattern)直接从Freemarker 调用该方法:

${dateTime.toString('MM-dd-yy')}

(未测试)


Ste*_*erl 9

如果您不想在toString('MM-dd-yy')整个模板上泼溅,那么甚至可以采用更简单的方法.

只需扩展Freemarker DefaultObjectWrapper,即可开箱即用了解Joda Time:

public class JodaAwareObjectWrapper extends DefaultObjectWrapper {

  @Override
  public TemplateModel wrap(final Object obj) throws TemplateModelException {
    if (obj == null) { return super.wrap(obj); }
    if (obj instanceof LocalDate) { return new SimpleDate(((LocalDate) obj).toDate(), TemplateDateModel.DATE); }
    // add support for all desired types here...
    return super.wrap(obj);
  }
}
Run Code Online (Sandbox Code Playgroud)

当您启动FreeMarker引擎时,将此对象包装器提供给FreeMarker配置

Configuration config = // ...
config.setObjectWrapper(new JodaAwareObjectWrapper());
Run Code Online (Sandbox Code Playgroud)

然后,您可以使用FreeMarkers标准日期内置插件,例如${dateTime?date}在模板中

  • +1,但更容易编写`if(obj instanceof LocalDate){return super.wrap(((LocalDate)obj).toDate()); }`.另外,`if(obj == null){...}`行是多余的. (2认同)