2016-07-11 4 views
4

ヒジラとグレゴリオ年表の両方を使用するアプリケーションでJava 8 Date and Time APIを使用しています。 Hijrahカレンダーの範囲は限られており、この範囲外の日付を作成しようとすると「日付範囲外」例外がスローされます(たとえば、ChronologyクラスのzonedDateTimeメソッドを使用)。ドキュメントを検索しましたが、年表のサポート期間を取得するために使用できる公式な方法は見つかりませんでした。例外がスローされたときにテストすることでHijrah年表の過去の最大日付を把握することができましたが、これは理想的ではありません。異なる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の答えは、少なくとも適切な年の範囲を取得するために役立つことができます。そして、はい、実際には、データは完全な年をカバーしています。 –

+0

ありがとうメノ。あなたが正しい。私は、Webカレンダーを介して許可されている日付の選択を制限する年の範囲についてもっと気にしています。 –

関連する問題