你可以将字符串转换为整数(注意溢出!),然后按照以下方式进行比较:
http://sourceforge.net/projects/freemarker/forums/forum/2345/topic/3027925?message=6479650
如果添加额外的数字,如毫秒,请注意不要超过最大整数值。
(来自上面的链接)
[#assign Adate = myDateA?string("yyyyMMdd")?number?int ]
[#assign Atime = myDateA?string("HHmmss")?number?int ]
[#assign Bdate = myDateB?string("yyyyMMdd")?number?int ]
[#assign Btime = myDateB?string("HHmmss")?number?int ]
我所做的是创建一个TemplateMethodModel来比较日期(注意:df是一个自定义线程安全的SimpleDateFormatter,带有时区):
public BooleanModel exec(List args) throws TemplateModelException {
int argcnt = args.size();
if (argcnt != 3) {
throw new TemplateModelException("Wrong arguments. Use \"exec(Date?string(\"yyyyMMddHHmmss\"), " +
"CompareString, Date?string(\"yyyyMMddHHmmss\"))\"," +
" where CompareString is < = > ");
}
String firstDate = (String) args.get(0);
String compareString = (String) args.get(1);
String secondDate = (String) args.get(2);
if (null == firstDate || null == secondDate || null == compareString ||
compareString.length() != 1) {
throw new TemplateModelException("Wrong arguments. Use \"exec(Date?string(\"yyyyMMddHHmmss\"), " +
"CompareString, Date?string(\"yyyyMMddHHmmss\"))\"," +
" where CompareString is < = > ");
}
Date first = null;
Date second = null;
try {
first = df.parse(firstDate);
second = df.parse(secondDate);
} catch (ParseException e) {
throw new TemplateModelException("Wrong arguments. Use \"exec(Date?string(\"yyyyMMddHHmmss\"), " +
"CompareString, Date?string(\"yyyyMMddHHmmss\"))\"," +
" where CompareString is < = > ");
}
if ("<".equals(compareString)) {
return new BooleanModel(first.before(second), BeansWrapper.getDefaultInstance());
}
else if ("=".equals(compareString)) {
return new BooleanModel(first.equals(second), BeansWrapper.getDefaultInstance());
}
else if (">".equals(compareString)) {
return new BooleanModel(first.after(second), BeansWrapper.getDefaultInstance());
}
return new BooleanModel(Boolean.FALSE, BeansWrapper.getDefaultInstance());
}
在模板中,我这样调用它:
[#if compareDate(now?string("yyyyMMddHHmmss"),"<", program.resStartDateTime?string("yyyyMMddHHmmss"))]
顺便提一下,“now”是在模板处理之前添加的DateModel对象。
model.put("now", new DateModel(new Date(), BeansWrapper.getDefaultInstance()));
通过将解析字符串作为参数传递并在执行时创建日期格式化程序,可以使TemplateMethodModel更加通用。