【问题标题】:Precision loss if converting from XMLGregorianCalendar to java.util.Date从 XMLGregorianCalendar 转换为 java.util.Date 时的精度损失
【发布时间】:2015-02-05 12:56:31
【问题描述】:

我编写了一个测试来将 XMLGregorianCalendar 日期转换为 java.util.Date 并返回。我的开始 xml 日期的字符串值为“2015-02-03T11:32:41.000755”,但在从 java.util.Date 转换回 XMLGregorianCalendar 后,字符串值为“2015-02-03T11:32:41.000”。有没有人想更改代码以便保留 xml 日期的最后 3 位数字?

谢谢, 埃里克

代码如下:

public class XMLCalendarTest {

    @Test
    public void testDateFormats() {

        try {
            // DateTime (yyyy-MM-dd'T'HH:mm:ss.SSSSSS)
            final String dateTimeText = "2015-02-03T11:32:41.000755";
            XMLGregorianCalendar xmlDateTime = DatatypeFactory.newInstance().newXMLGregorianCalendar(dateTimeText);
            Assert.assertEquals(dateTimeText, xmlDateTime.toXMLFormat());

            // after converting from Date the XML date is "2015-02-03T11:32:41.000" --> why?
            Assert.assertEquals(dateTimeText, createXMLDateTime(createDate(xmlDateTime)));

        } catch (DatatypeConfigurationException e) {
            e.printStackTrace();
        }
    }

    private XMLGregorianCalendar createXMLDateTime(final Date date) throws DatatypeConfigurationException {
        if (date == null) {
            return null;
        }

        final GregorianCalendar c = new GregorianCalendar();

        c.setTime(date);

         final XMLGregorianCalendar xmlCalendar = DatatypeFactory.newInstance().newXMLGregorianCalendar(c);
         xmlCalendar.setTimezone(DatatypeConstants.FIELD_UNDEFINED);

         return xmlCalendar;

    }

    private static Date createDate(final XMLGregorianCalendar xmlCalendar) {
        if (xmlCalendar != null) {
            return xmlCalendar.toGregorianCalendar().getTime();
        }
        return null;
    }
}

【问题讨论】:

    标签: java xml date


    【解决方案1】:

    java.util.Date 仅保持毫秒精度。

    java.sql.TimeStamp 具有纳秒精度。

    我没有看到在 XMLGregorianCalendar 和 TimeStamp 之间进行转换的自动方式,但 getFractionalSeconds 应该可以提供您想要的精度级别。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-06-08
      • 1970-01-01
      • 2011-04-10
      • 1970-01-01
      • 2019-03-06
      • 2013-07-14
      • 1970-01-01
      • 2011-12-17
      相关资源
      最近更新 更多