0
유효한 XSD datetime
값은 다음과 같습니다는
2002-05-30T09:00:00
2002-05-30T09:30:10.5
2002-05-30T09:30:10Z
2002-05-30T09:30:10-06:00
때문에 실패 할 경우 처음 두 값의 ZonedDateTime
public static void main(String[] args) {
System.out.println(ZonedDateTime.parse(value, DateTimeFormatter.ISO_DATE_TIME).withZoneSameInstant(ZoneId.systemDefault()).toLocalDateTime());
}
으로이 값을 구문 분석했을 때
Exception in thread "main" java.time.format.DateTimeParseException: Text '2017-12-05T10:05:19.296' could not be parsed: Unable to obtain ZonedDateTime from TemporalAccessor: {},ISO resolved to 2017-12-05T10:05:19.296 of type java.time.format.Parsed
것은 내가를 사용합니다 : 어떤 시간대가 없다그냥 마지막 두 값에서 시간대를 무시합니다.
public static void main(String[] args) {
System.out.println(LocalDateTime.parse("2002-05-30T09:30:10-06:00", DateTimeFormatter.ISO_DATE_TIME)); // print 2002-05-30T09:30:10 and I am in +1 timezone
}
그래서이 xsd datetime을 변환하는 올바른 방법은 무엇입니까?
UPDATE
는 어쩌면 가장 좋은 방법은 XSD를 변환 : datime도 zoneDateTime를 지원 GregorianCalendar를하는 옛날 방식을 사용하는 것입니다?
public static LocalDateTime parseDateTime(String strVal) {
try {
if (strVal == null || strVal.isEmpty())
return null;
return ((GregorianCalendar) (DatatypeConverter.parseDateTime(strVal))).toZonedDateTime()
.withZoneSameLocal(ZoneId.systemDefault()).toLocalDateTime();
} catch (Exception e) {
throw new IllegalArgumentException(e);
}
}