在某些情况下(当我们在 nanos 中给出少于 9 位的数字时), AlexCG 的答案工作不太正常,例如,当我们将 nanos 设置为 25 时,我们会收到如下输出:
Timestamp::2020-01-02 16:30:01.000000025
Calendar:::2020-01-02T16:30:01.25
这不是真的。我稍微修改了这个方法,现在是:
@Test
public void convertLocalDataTimeToXmlGCal() throws Exception {
Timestamp ts = new Timestamp(new Date().getTime());
ts.setNanos(25);
LocalDateTime ldt = ts.toLocalDateTime();
XMLGregorianCalendar cal = DatatypeFactory.newInstance().newXMLGregorianCalendar();
cal.setYear(ldt.getYear());
cal.setMonth(ldt.getMonthValue());
cal.setDay(ldt.getDayOfMonth());
cal.setHour(ldt.getHour());
cal.setMinute(ldt.getMinute());
cal.setSecond(ldt.getSecond());
String nanos = "0." + StringUtils.leftPad(String.valueOf(ldt.getNano()), 9, '0');
cal.setFractionalSecond(new BigDecimal(nanos));
System.out.println("Timestamp::" + ts);
System.out.println("Calendar:::" + cal);
}
现在输出是正确的:
Timestamp::2020-01-02 16:33:02.000000025
Calendar:::2020-01-02T16:33:02.000000025
需要 Apache Commons 库。