1

ユーザーから年数を取得します。どうすればヒジュラ年数に変換できますか? jodatime ではなく、time4j または Java 8 を使用することをお勧めします。

例: 2016 年からイスラム暦の年番号が必要です。

私はこの投稿を見つけました.Is there any library or algorithm for Persian (Shamsi or Jalali) calendar in Android?

System.out.println(jalali.transform(PlainDate.class)); // 2015-03-25

しかし、メソッド変換は機能しません。

また、イスラム暦をグレゴリオ暦に変換するこの投稿を見つけました: イスラム 暦の日付文字列からグレゴリオ暦の日付を取得する

しかし、私はグレゴリオ暦からイスラム暦まで必要です.

4

1 に答える 1

2

「しかし、メソッド変換は機能しません」という文。おそらく「コンパイルされない」と読むべきです。

その理由は、HijriCalendarがさまざまな亜種 (Umalqura など) のファミリーを表しているからです。CalendarVariant技術的背景: このクラスはの代わりに を継承していCalendricalます。したがって、コンパイラは、2 つの引数transform()を指定して-methodを使用することを強制します。2 番目の引数は、 のバリアントを指定します。例:HijriCalendar

PlainDate today = SystemClock.inLocalView().today();

HijriCalendar umalqura = 
  today.transform(HijriCalendar.class, HijriCalendar.VARIANT_UMALQURA);
HijriCalendar westIslamicCivil = 
  today.transform(HijriCalendar.class, HijriAlgorithm.WEST_ISLAMIC_CIVIL);

System.out.println(umalqura); // AH-1437-07-23[islamic-umalqura]
System.out.println(westIslamicCivil); // AH-1437-07-22[islamic-civil]

この例は、バリアントを指定することが重要である理由も示しています。(同じグレゴリオ暦の日付に対して) 1 日の違いがわかります。実際、Time4J は 11 のバリアントをサポートしています。umalquara バリアントはサウジアラビアの公式カレンダーですが、8 つのアルゴリズムバリアントは概算として解釈され、より広い有効範囲を持つ必要があります。

インスタンスをHijriCalendar取得したら、簡単にイスラム暦を取得できます。

int hijriYear = umalqura.getYear();
System.out.println("Year (hirji-umalqura): " + hijriYear); // 1437
于 2016-04-30T13:10:31.753 に答える