我编写了一个测试,将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;
}
}
答案 0 :(得分:2)
java.util.Date仅保持毫秒精度。
java.sql.TimeStamp具有纳秒精度。
我没有看到在XMLGregorianCalendar和TimeStamp之间进行转换的自动方式,但是getFractionalSeconds应该提供对所需精度级别的访问。