我假设您想要的结果是XMLGregorianCalendar
类似2018-06-30T00:00:00.000+02:00
的(至少这是我在计算机上运行您的代码时得到的结果(它有效))。
这个答案进一步假设您是从 SQL 数据库中获取的,java.sql.Date
并且您想要从其方法中获取的。如果是这样,我建议您既不需要也不(没错)。XMLGregorianCalendar
String
toXMLFormat
java.sql.Date
XMLGregorianCalendar
要从结果集中获取日期:
LocalDate invReceivedDate = yourResultSet.getObject("inv_receive_date", LocalDate.class);
我没有测试过代码,你当然应该用正确的列标签代替inv_receive_date
. 如果使用 JPA,现代版本也可以为您提供LocalDate
对象。
要获取 XML 字符串:
OffsetDateTime date = invReceivedDate.atStartOfDay(ZoneId.systemDefault())
.toOffsetDateTime();
System.out.println(date.toString());
在我的测试运行中,这个打印
2018-06-30T00:00+02:00
如果你与我date.toXMLFormat()
之前得到的字符串进行比较,你会注意到秒和秒的小数部分没有打印出来。这可能没问题。格式为 ISO 8601,根据该标准,秒和秒的小数部分是可选的,因此当它们为 0 时将它们排除在外应该可以工作。如果您对包含它们有特殊要求,可以使用
DateTimeFormatter formatterForXml
= DateTimeFormatter.ofPattern("uuuu-MM-dd'T'HH:mm:ss.SSSxxx");
System.out.println(date.format(formatterForXml));
这次的输出是
2018-06-30T00:00:00.000+02:00
所以和以前一模一样date.toXMLFormat()
。您也可能只需要没有时间和 UTC 偏移量的日期。如果是这样,它仍然更简单:
System.out.println(invReceivedDate.toString());
输出:
2018-06-30
为什么?不仅仅是因为它有效。java.sql.Date
早已过时且设计不佳,所以不要使用它。相反,我使用LocalDate
的是现代 Java 日期和时间 API 的 java.time。现代 API 使用起来要好得多。
链接: Oracle 教程:日期时间解释如何使用java.time
.