是com.sun.org.apache.xerces.internal.jaxp.datatype.DatatypeFactoryImpl #newDurationDayTime已损坏?

时间:2015-06-26 15:46:54

标签: java

此:

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.000S0

将打印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

0 个答案:

没有答案