我碰巧使用漂亮的时间1.0.6 以人类可读的格式显示两个时间点之间的间隔。
有一个内置的 JSF 转换器,
com.ocpsoft.pretty.time.web.jsf.PrettyTimeConverter
但它只支持java.util.Date
对象。
我碰巧使用以下转换器org.joda.time.DateTime
@ManagedBean
@ApplicationScoped
public final class PrettyJodaTimeConverter extends PrettyTimeConverter
{
@Override
public String getAsString(final FacesContext context, final UIComponent component, final Object value)
{
if (value instanceof DateTime) {
return super.getAsString(context, component, ((DateTime) value).toDate());
} else {
return super.getAsString(context, component, value);
}
}
}
这会显示一个时间间隔,例如“4 小时前” <h:outputText>
,例如
<h:outputText value="#{productInquiryManagedBean.lastInquiry}"
converter="#{prettyJodaTimeConverter}"/>
但是我需要根据 JSF 托管 bean 中的条件检查在<p:growl>
(或<p:messages>
, ) 上显示一条消息。<h:messages>
所以这个转换器不能用(如果能用请建议)。相反,我需要像这样在有问题的托管 bean 中手动格式化它,
private DateTime lastInquiry;
private String emailId;
private Product product;
if(productInquiryService.isPeriodExpired(30, emailId, product))
{
lastInquiry=productInquiryService.getDateTimeOfLastInquiry(email, product);
Locale locale = FacesContext.getCurrentInstance().getViewRoot().getLocale();
PrettyTime time=new PrettyTime(lastInquiry.toDate(), locale);
time.setLocale(locale);
FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, Utility.getMessage("faces.message.error"), Utility.getMessage("inquiry.min.time.expire", time.format(new Date()))));
}
这会显示一条消息,<p:growl>
例如“您在4 小时后进行了查询”。
这条消息格式可以更改为“您在4 小时前进行了查询”,<h:outputText>
如上所示?
此外,此处显示的间隔格式未本地化到资源包中的特定位置。它似乎总是使用其默认语言环境。产生的消息PrettyTime#format()
应该是本地化的。
我将错误的参数传递给构造函数。因此,指示未来时间的错误消息。它们应该如下所示。
PrettyTime time=new PrettyTime(new Date(), locale);
time.format(lastInquiry.toDate());
//lastInquiry is fetched from the database which a customer made an inquiry on.
它现在显示正确的(过去时间)格式,例如“4 小时前”。
关于我正在寻找的语言环境HI
(实际上是hi_IN
印度的印地语)在库中提供的资源包(在com.ocpsoft.pretty.time.i18n
包中)中不可用,即使在i18n 和多语言支持部分中提到了它。