2017-03-31 9 views
1

ISO8601 형식의 주기적 이벤트에 대한 표기법을 찾으려고합니다. 하나의 표현식으로 끝낼 수 있습니까? 예를 들어한 표현식에서 날짜와 기간을 지정하는 방법

이 이벤트는주기 1시간와 17시 25분 3 월 (31) 2017 년에 시작 :

2017-03-31T17:25:00Z/PT1H 

는 자바 Duration이 식을 구문 분석을 시도 : 예외

java.time.Duration d = java.time.Duration.parse("2017-03-31T17:25:00Z/PT1H"); 

결과를.

+0

인스턴트 타임 라인의 앵커가 빠져 있기 때문에'java.time.Duration'과 같은 일시적인 양은 간격이 아니라는 것을 이해해야합니다 (정의 된 시작과 끝 없음). 따라서이 유형은 기껏해야 두 번째 구성 요소 인 "PT1H"를 구문 분석하는 데만 사용할 수 있습니다. –

답변

2

Iso-8601에서 표현 "2017-03-31T17 : 25 : 00Z/PT1H"는 반복 간격이 아니라 보통 순간/순간 간격입니다. 반복되는 간격을 찾으려면 "Rn /"으로 접두어를 붙이고 "n"은 양의 정수 (선택 사항) 여야합니다. 당신은 문자열 처리 및 부분 파싱 중 코드를 자신의 해결을해야하므로 표준 자바는 간격에 대한 지원이 없거나 내 하나 (Time4J)와 같은 제 3 자 라이브러리를 사용 : 잠시

MomentInterval interval = MomentInterval.parseISO("2017-03-31T17:25:00Z/PT1H"); 
System.out.println(interval); // [2017-03-31T17:25:00Z/2017-03-31T18:25:00Z) 

도 참조 Javadoc 간격. 반복되는 간격을 보려면이 클래스 IsoRecurrence을 살펴보십시오.

상호 운용성 참고 사항 : toTemporalAccessor() 메서드를 사용하여 Moment 구성 요소를 java.time.Instant으로 쉽게 변환 할 수 있습니다.