2015-02-05 87 views
1

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

感谢, 埃里克

下面是代码:

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; 
    } 
} 

回答