Jod*_*hen 86
转换LocalDate为XMLGregorianCalendar:
LocalDate date = LocalDate.now();
GregorianCalendar gcal = GregorianCalendar.from(date.atStartOfDay(ZoneId.systemDefault()));
XMLGregorianCalendar xcal = DatatypeFactory.newInstance().newXMLGregorianCalendar(gcal);
Run Code Online (Sandbox Code Playgroud)
转换回来比较简单:
xcal.toGregorianCalendar().toZonedDateTime().toLocalDate();
Run Code Online (Sandbox Code Playgroud)
ris*_*kop 12
LocalDate仅存储年/月/日信息.其中没有时间和时区信息.XMLGregorianCalendar存储日期(年/月/日)+ 可选时间和可选的时区信息.
因此,从LocalDate转换为XMLGregorianCalendar很简单:
LocalDate in;
XMLGregorianCalendar out;
in = LocalDate.parse("1999-11-11");
out = DatatypeFactory.newInstance().newXMLGregorianCalendar(in.toString());
Run Code Online (Sandbox Code Playgroud)
从XMLGregorianCalendar转换为LocalDate可能并不那么简单,因为XMLGregorianCalendar 可能包含您无法存储在LocalDate中的时间和时区信息.
但是,我想如果你要从XMLGregorianCalendar转换为LocalDate,那么XMLGregorianCalendar是由非时间化的xsd:date元素(在xml中表示为YYYY-MM-DD)产生的.在这种情况下,你应该像这样转换它:
XMLGregorianCalendar in;
LocalDate out;
in = DatatypeFactory.newInstance().newXMLGregorianCalendar("2011-11-11");
out = LocalDate.parse(in.toXMLFormat());
Run Code Online (Sandbox Code Playgroud)
整个例子:
{
LocalDate in;
XMLGregorianCalendar out;
in = LocalDate.parse("1999-11-11");
out = DatatypeFactory.newInstance().newXMLGregorianCalendar(in.toString());
System.out.println("in: " + in.toString());
System.out.println("out: " + out.toXMLFormat());
}
{
XMLGregorianCalendar in;
LocalDate out;
in = DatatypeFactory.newInstance().newXMLGregorianCalendar("2011-11-11");
out = LocalDate.parse(in.toXMLFormat());
System.out.println("in: " + in.toXMLFormat());
System.out.println("out: " + out.toString());
}
Run Code Online (Sandbox Code Playgroud)
转换LocalDate为XMLGregorianCalendar可以使用
LocalDate localDate = ...;
GregorianCalendar calender = new GregorianCalendar();
Date utilDate = Date.from( localDate.atStartOfDay( ZoneId.systemDefault() ).toInstant() );
calender.setTime(utilDate);
XMLGregorianCalendar xmlCal = DatatypeFactory.newInstance().newXMLGregorianCalendar(calender);
Run Code Online (Sandbox Code Playgroud)
并转换XMLGregorianCalendar回LocalDate:
XMLGregorianCalendar xmlCal = ...;
Date utilDate = xmlCal.toGregorianCalendar().getTime();
LocalDate localDate = LocalDateTime.ofInstant( utilDate.toInstant(), ZoneId.systemDefault() ).toLocalDate();
Run Code Online (Sandbox Code Playgroud)
下面是一种从 LocalDate 转换为 XMLGregorianCalendar 的简单方法,它既保留了未定义的字段(小时、时区等),又高效(即不转换为/从字符串)。与其他一些解决方案不同,这会导致没有时区的 XML 日期,例如,<date>2018-11-06</date>而不是<date>2018-11-06+01:00</date>.
LocalDate date = ...;
XMLGregorianCalendar xmlCal = DatatypeFactory.newInstance().newXMLGregorianCalendar();
xmlCal.setYear(date.getYear());
xmlCal.setMonth(date.getMonthValue());
xmlCal.setDay(date.getDayOfMonth());
Run Code Online (Sandbox Code Playgroud)
转换回来更简单一点:
XMLGregorianCalendar xmlCal = ...
LocalDate date = LocalDate.of(xmlCal.getYear(), xmlCal.getMonth(), xmlCal.getDay());
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
53587 次 |
| 最近记录: |