2016-11-09 1 views
1

이것을 검색 할 때 많은 답을 얻었습니다. 따라서 질문이 왔습니다.xsd : date를 LocalDate로 구문 분석하는 올바른 방법

자바 어떤xsd:dateLocalDate A를 구문 분석 할 수있는 올바른 방법은 무엇입니까?

여기에 내가 가지고 올 한 방법 (인터넷 검색에서)입니다

DatatypeFactory.newInstance() 
    .newXMLGregorianCalendar(str) 
    .toGregorianCalendar() 
    .toZonedDateTime() 
    .toLocalDate() 

또 다른 :

DatatypeConverter.parseDate(str) 
    .toInstant() 
    .atZone(ZoneId.systemDefault()) 
    .toLocalDate() 

아니면 내가 전혀 다른 일을해야 하는가?

+0

이 정보가 도움이됩니까? http://stackoverflow.com/questions/7519800/apache-axis-calendar-instance-that-gets-serialized-to-0001-01-01t000000-000z – kaqqao

+0

@kaqqao - 나는 믿지 않습니다. – Cheetah

답변

0

아니, 제대로LocalDate어떤xsd:date 변환 할 수있는 방법이 없습니다.

xsd:date에는 시간대가있을 수 있으며 LocalDate에는 시간대가 없습니다. 따라서 이 아니거나xsd:date이거나 변환이 완전히 이 아니거나이 아닙니다.

XMLGregorianCalendar cal = DatatypeFactory.newInstance().newXMLGregorianCalendar(str); 
LocalDate localDate = LocalDate.of(cal.getYear(), cal.getMonth(), cal.getDay()); 

내가 GregorianCalendarZonedDateTime를 통해 이렇게 답변의 몇 가지를 본 적이 있지만 그 이유가 이해가 안 : 당신이 시간대를 잃고 OK 경우

후, 나는 다만 것 당신이 어쨌든 타임 존을 잃는다면이 간접적 인 지시.

는 또한 XMLGregorianCalendar를 통해 구문 분석 XMLGregorianCalendar 이후 Calendar를 통해 DatatypeConverter.parseDate보다 더 나은 xsd:date의 어휘 값에 더 가까이있다라고 생각합니다. LocalDate에 필요한 것은 단지 년, 월 및 일이므로이 값에 대한 최단 경로를 선호하는 것이 좋습니다.

+0

첫 번째 예는 'ZonedDateTime'으로 먼저 변환 된 후 'LocalDate'(사실 ZonedDateTime이 LocalDateTime에 먼저 가려 졌음)라는 사실에도 불구하고 표준 시간대 정보가 느슨합니다. – Cheetah

+0

@Cheetah'LocalDate' [시간 또는 시간대를 저장하거나 나타내지 않습니다.] (https://docs.oracle.com/javase/8/docs/api/java/time/LocalDate.html), 마침표. 따라서 궁극적으로 'LocalDate'로 변환하면 시간대를 잃어 버릴 수 있습니다. – lexicore

+0

나는 당신이하는 말을 이해합니다. 제 질문은 사실 올바르지 않습니다. 내 질문은해야한다 : "어떻게하면 xsd : dateDate에서 날짜 구성 요소를 꺼내야합니까 LocalDate 개체에 저장?" – Cheetah

관련 문제