在我的应用程序中,我必须处理以字符串形式出现的日期,格式为yyyy-MM-dd。我不能改变底层类。对于视图,为了方便用户,我希望将其显示在dd.MM中。yyyy 格式。
据我所知,f:convertDateTime>只适用于java.util。日期,而不是假装是日期的字符串。所以我写了我自己的转换器:
@Override
public String getAsString(FacesContext context, UIComponent component, Object value) {
try {
SimpleDateFormat inputFormat = new SimpleDateFormat("yyyy-MM-dd");
Date tempDate = inputFormat.parse((String) value);
SimpleDateFormat outputFormat = new SimpleDateFormat("dd.MM.yyyy");
return outputFormat.format(tempDate);
}
catch (ParseException e) {
return null;
}
}
这是有效的,但感觉不对。将字符串转换为日期,然后再转换回另一个字符串。另外,我喜欢convertDateTime处理时区和用户区域设置的方式,这在这种方法中完全被忽略了。
有更好的解决方案吗?比如解析一个日期,然后通过f:convertDateTime传递它?
后端(Bean):
String string = "2014-05-14";
Date date = new SimpleDateFormat("yyyy-MM-dd", Locale.ENGLISH).parse(string);
System.out.println(date); // Sat May 14 00:00:00 BOT 2014
setDate(date); //Set date in bean
前端(在value中引用bean中的字段):
<h:outputText value="#{bean.date}">
<f:convertDateTime pattern="dd.MM.yyyy" timeZone="EST" type="date" />
</h:outputText>
还没有测试过…这就是你想要的吗?
文档