此:
com.sun.org.apache.xerces.internal.jaxp.datatype.DatatypeFactoryImpl sun = new com.sun.org.apache.xerces.internal.jaxp.datatype.DatatypeFactoryImpl();
final long aTime = TimeUnit.DAYS.toMillis(32)
System.err.println(sun.newDurationDayTime(aTime));
如果我分别使用P1DT0H0M0.000S
和0
,将打印1
,或getMonths
个月和getDays
天。
我意识到不应该根据javadocs
中的内容设定月份其词汇表示仅包含日,小时,分钟和秒组件。
months
0
似乎没问题,但这种情况下的天数应为32
。
如果我使用org.apache.xerces.jaxp.datatype.DatatypeFactoryImpl
,我会收到预期的结果,32
天或P32DT0H0M0.000S
。
com.sum版本是否已损坏,或者合同中是否有一些内容未提及普通xerces实现不严格关于该方法何时不能用于持续时间> =一个月?
<小时/> 编辑:
我可以在DurationDayTimeImpl
w / in com.sum中看到,在这种情况下使用的构造函数似乎得到了正确的持续时间。致电super
后,这些月份为1
,日期为1
。但是在规范化时间成分之后,几年和几个月都被消灭了:
this.years = null;
this.months = null;
这就是它以一天的价值结束的方式。我可以看出为什么它会根据javadocs的说法清除这些值,但这似乎是一个错误,不能将这些值转换为数天。
简单的xerces impl简单地将各个组件分开; com.sun版本使用XMLGregorianCalendar
。