2016-07-11 3 views
4

나는 Hijrah와 Gregorian 연대기를 모두 사용하는 응용 프로그램에서 Java 8 Date and Time API를 사용하고 있습니다. Hijrah 일정은 제한된 범위를 지원하며이 범위 밖의 날짜를 만들려고하면 날짜 범위를 벗어난 예외가 throw됩니다 (예를 들어 연대기 클래스의 zonedDateTime 메서드 사용). 문서를 검색했지만 연대기에 지원되는 기간을 얻는 데 사용할 수있는 공식 방법을 찾을 수 없습니다. 예외가 발생했을 때 테스트하여 Hijrah 연대기의 최대 날짜를 파악할 수 있었지만 다른 Java 버전을 사용하고 있기 때문에 이상적이지 않습니다. 지원되는 날짜 범위가 다른 Java 업데이트에서 변경 될 수 있습니다. 히즈라기 (Hijrah) 연대기와 같은 Java 8 연대기의 근원적 한계를 알아내는 공식적인 방법이 있습니까? 어떤 도움을 주셔서 감사합니다. 고맙습니다.Java 8 연대기의 근원 한계를 얻는 방법?

답변

4

Chronology.range() 방법을 사용할 수 있습니다. 예 :

import java.time.*; 
import java.time.chrono.*; 
import java.time.temporal.*; 

public class Test { 
    public static void main(String[] args) { 
     Chronology hijrah = HijrahChronology.INSTANCE; 
     ValueRange range = hijrah.range(ChronoField.YEAR); 
     System.out.println(range.getMinimum()); 
     System.out.println(range.getMaximum()); 
    } 
} 

이는 유효 년수가 1300-1600임을 나타냅니다. 당신은 아마 몇 가지 실험 테스트를 작성할 수 있습니다 -

그것은 그 해 1300의 전체 1600가 유효 올해의 전체,하지만 난 그렇게 의심이 있다는 것을 의미인지 나에게 분명하지 않다.

+0

Jon에게 감사드립니다. 웬일인지, 나는 그 기능을 완전히 놓쳤다. 나는 이것이 이것을 인정 된 대답으로 표시 할 것이다. –

+1

@SammyJaafar 좋은 질문입니다. 문제는'java.time' 라이브러리가이 영역에서 매우 버그가 있다는 것입니다. 예를 들어, 'HijrahChronology.INSTANCE.range (ChronoField.EPOCH_DAY)'표현으로 일 정밀도를 달성하는 것은 불행히도 전혀 작동하지 않습니다. 따라서 실제 한계를 테스트해야합니다. J.Skeets 대답은 적어도 적절한 연도 범위를 얻는 데 도움이 될 수 있습니다. 그리고 사실, 실제로 데이터는 FULL 년을 커버합니다. –

+0

감사합니다. 네가 옳아. 웹 달력을 통해 허용되는 날짜 선택을 제한하기 위해 올해 범위에 대해 더 신경을 썼습니다. –

관련 문제