2011-02-21 4 views
5

String에서 Partials를 생성하고 싶지만이를 지원하는 API에서 찾을 수있는 항목이 없습니다. 분명히 Joda-Time 프레임 워크 외부에 내 파서를 작성하고 Partials를 작성할 수는 있지만 API에 아직이 작업을 수행 할 수있는 능력이 없다는 것을 상상할 수는 없습니다.Joda-Time Partials 구문 분석

Threeten (JSR-310)의 사용은 용인 될 수 있지만 Partials를 지원하지는 않습니다. 알파 상태인지 또는 부분 개념이 다른 방식으로 처리되는지 여부는 알지 못합니다. 아직 발견하지 못했습니다.

문자열 (2011, 02/11 등)을 부분으로 변환하는 가장 좋은 방법은 무엇입니까?

답변

2

DateTimeParserBucket을 확장했습니다. 내 확장 클래스는 saveField() 메소드에 대한 호출을 가로 채고 super에 위임하기 전에 필드 유형과 값을 저장합니다. 또한 저장된 필드 값을 사용하여 Partial을 만드는 메서드를 구현했습니다.

내 버킷 인스턴스를 DateTimeParser.parseInto()에 전달한 다음 부분 생성을 요청할 수 있습니다.

작동하지만 Joda-Time에 깊은 인상을 받았다고 말할 수는 없습니다. 상자에서 Partials를 구문 분석하는 것은 지원되지 않습니다. DateTimeFormatter.parsePartial (String)의 부족은 눈부신 생략입니다.

+2

코드를 공유해 주시겠습니까? 이 기능에 대한 유스 케이스를 갖고 있으며, 시작을 좋아할 것입니다. – RubyTuesdayDONO

1

수락 할 부분에 대해 유효한 형식을 정의해야합니다. 텍스트를 가져 와서 Partial을위한 최상의 매치를 추론 할 클래스는 없습니다. 로케일, 사용자 환경 설정 등을 기반으로하는 너무 주관적입니다. 따라서 유효한 모든 형식의 입력 목록을 만드는 방법은 없습니다. 이들 모두를 상호 배타적으로 만드는 것은 매우 어려울 것이므로 우선 순위가 있어야합니다. 예를 들어, mm/ddmm/yy이 모두 유효한 형식 일 수 있습니다. 문자열 02/11을 주면 우선 순위가 있어야합니까?

정확한 형식을 결정한 후에는 DateTimeFormat.forPattern을 사용하여 각각에 대해 DateTimeFormatter을 만들어야합니다. 그런 다음 각 포맷터를 사용하여 parseInto a MutableDateTime을 시도 할 수 있습니다. 그런 다음 MutableDateTime의 각 입력란을 통해 값을 Partial으로 전송합니다.

불행히도 Joda 라이브러리에서이를 처리하는 더 좋은 방법은 없습니다.

+0

그건 제가 두려워했던 겁니다. 각 형식의 DateTimes를 Partials로 변환하는 코드는 작성하지 않을 것입니다. 필드 목록을 허용하고 해당 정보를 사용하여 포맷터를 만든 다음 나중에 변환을 수행하는 클래스조차도 너무 많은 해킹입니다. 포맷터에서 필드 유형 목록을 추출하는 방법을 알고 있다면 포맷터와 DateTime을 허용하는 메소드를 작성하여 Partial을 리턴 할 수 있습니다. 그렇지 않으면 버킷 솔루션으로 이동하거나 기존 코드를 계속 사용합니다. – user371320

+0

다른 옵션이있는 곳이 보이지 않습니다. –

1

ISODateTimeFormat 클래스 allows 부분 인쇄. 여러분이 말한 것처럼 DateTimeFormatter에 구문 분석 방법이 없습니다 (구문 분석을 통해 LocalDate으로 해석 할 수 있음).

ThreeTen/JSR-310은 Partial을 대체하는 DateTimeFields 클래스를가집니다. 부분 부분을 CalendricalMerger으로 구문 분석 할 수는 있지만 아직 변환 할 수없는 부분은 DateTimeFields입니다.

+0

거기에 문제가 있습니다. https://sourceforge.net/tracker/?func=detail&aid=3280815&group_id=97367&atid=617892 – RubyTuesdayDONO