Потеря точности при преобразовании из XMLGregorianCalendar в java.util.Date

1

Я написал тест, чтобы преобразовать дату XMLGregorianCalendar в java.util.Date и обратно. В моей начальной дате xml есть строковое значение "2015-02-03T11: 32: 41.000755", но после его преобразования обратно из java.util.Date в XMLGregorianCalendar значение строки равно "2015-02-03T11: 32: 41.000". Есть ли у кого-нибудь идея изменить код, чтобы можно было сохранить последние 3 цифры даты xml?

Спасибо, Эрик

Вот код:

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;
    }
}
Теги:
date

1 ответ

2

Java.util.Date поддерживает только миллисекундную точность.

У java.sql.TimeStamp есть наносекундная точность.

Я не вижу автоматизированного способа преобразования между XMLGregorianCalendar и TimeStamp, но getFractionalSeconds должен обеспечивать доступ к требуемому уровню точности.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню