我正在使用primefaces并且我有一个数据包女巫包含3列:DateStart,DateEnd和NombreOfDay,我想得到DateStart和DateEnd之间的区别并将结果放在NombreOfDay上,这是我尝试的要做:
<p:dataTable var="demande" value="#{myBean.allDemandes}">
<p:column headerText="Start:" >
<h:outputText value="#{myBean.dateStart}" >
<f:convertDateTime type="date" pattern="dd.MM.yyyy" timeZone="CET" /> </h:outputText></p:column>
<p:column headerText="End:" >
<h:outputText value="#{myBean.dateEnd}" >
<f:convertDateTime type="date" pattern="dd.MM.yyyy" timeZone="CET" /></h:outputText>
</p:column>
<!-- Nombre of days between two date -->
<p:column headerText="Nbr" >
<h:outputText value="#{demande['dateEnd']-demande['dateStart']}" >
</h:outputText>
</p:column>
但是我收到了这个错误:
java.lang.IllegalArgumentException: Cannot convert 31/03/15 00:00 of type class java.util.Date to Number
at org.apache.el.lang.ELArithmetic.coerce(ELArithmetic.java:407) [jbossweb-7.0.13.Final.jar:]
at org.apache.el.lang.ELArithmetic.subtract(ELArithmetic.java:315) [jbossweb-7.0.13.Final.jar:]
at org.apache.el.parser.AstMinus.getValue(AstMinus.java:41) [jbossweb-7.0.13.Final.jar:]
at org.apache.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:189) [jbossweb-7.0.13.Final.jar:]
任何想法?
答案 0 :(得分:2)
EL中的-
运算符仅在java.lang.Number
上运行。 java.util.Date
不是其中的子类。您需要通过Date#getTime()
方法从中获取原始时间戳,该方法以long
的风格返回以毫秒为单位的纪元时间,其在EL中被解释为java.lang.Long
,是brace notation的完整子类。 1}}。
所以,基本上下面会以毫秒为单位打印差异:
java.lang.Number
(请注意,我通过删除不必要的output text和EL function来简化EL表达式
忽略DST影响,您可以将结果除以一整天可以包含的毫秒数:<p:column headerText="Nbr">
#{demande.dateEnd.time - demande.dateStart.time}
</p:column>
:
1000 * 60 * 60 * 24
如果您想考虑DST影响,那么您最好在Java方面完成这项工作,最好使用可重复使用的OmniFaces。 JSF实用程序库of:daysBetween()
开箱即用,source code here({{3}}):
<p:column headerText="Nbr">
#{(demande.dateEnd.time - demande.dateStart.time) / (1000 * 60 * 60 * 24)}
</p:column>
答案 1 :(得分:1)
您无法按照您尝试的方式减去Date
个对象。 -
运算符期望参数是一个数字(或者至少可以被转换)。这是异常发生的地方。你甚至会期望什么?天?分钟?
执行bean中的逻辑,即为此目的编写新方法。 通过这种方式,您可以拥有以下内容:
<h:outputText value="#{myBean.calcDurationInDays(demande)}" />
鉴于你有一个类Demande
,你的支持bean方法可能是:
public int calcDurationInDays(Demande demande){
//calculate difference between demande's start and end date
return difference;
}
关于如何区分java中的日期,有很多线程和库,例如:How do you subtract Dates in Java?