2017-05-23 14 views
4

たとえば、hijriカレンダーをhijri月の第3水曜日に設定しようとしています。time4jのhijriカレンダーで週を取得

PlainDate date = PlainDate.of(2017, 3, 1); // first of march 2017 
System.out.println(date.with(WEEKDAY_IN_MONTH.setToThird(WEDNESDAY)));  

をしかし、あなたが見ることができるようにこれは、グレゴリオ暦の第三水曜日にカレンダーを設定します。
いくつかの検索の後、私はこのコードに達します。
time4jのlibに他のカレンダーの3番目の水曜日を設定する方法はありますか?

+0

Time4Jの問題追跡ツールで新しい[問題](https://github.com/MenoData/Time4J/issues/653)を開設しました。その間、この欠落している新機能の唯一の回避策は、ある月の全日にわたって繰り返し、検索された曜日がどのくらいの頻度で発生したかを数えることです。 –

+0

バージョンv3.33の新機能が実装されました(ただし、まだリリースされていません)。 –

+0

偉大な仕事このlibと私の友人。私は新しいリリースを楽しみにしています。 – max

答えて

0

解決策は、リリースv4.28/3.33の2017年7月の終わりから既に利用可能ですが、申し訳ありません。 (私は現在、リリース日v4.29/3.34(日の出/日の入り計算)に忙しいです)。

毎月のカレンダー(HijriCalendarを含む)は、Time4Aバージョンv3.33-2017b以降のWEEKDAY_IN_MONTH要素をサポートしています。カレンダーごとに月の定義が異なるため、年表ごとに異なります。例:新しい要素を使用する方法

HijriCalendar hijri = 
    HijriCalendar.of(
    HijriCalendar.VARIANT_UMALQURA, 1395, HijriMonth.RAMADAN, 1); // Sunday, 1975-09-07 
assertThat(
    hijri.with(HijriCalendar.WEEKDAY_IN_MONTH.setTo(3, Weekday.WEDNESDAY)), 
    is(hijri.plus(17, HijriCalendar.Unit.DAYS))); // AH-1395-09-18 

より多くの例がJUnit-testで見つけることができます。新しい要素は、CLDRパターンシンボル "F"の書式パターンでも使用できます。

ChronoFormatter<HijriCalendar> f1 = 
     ChronoFormatter.setUp(HijriCalendar.family(), Locale.ENGLISH) 
      .addEnglishOrdinal(HijriCalendar.WEEKDAY_IN_MONTH) 
      .addPattern(" EEEE 'in' MMMM", PatternType.CLDR) 
      .build(); 
    assertThat(f1.format(hijri), is("1st Sunday in Ramadan")); 

    ChronoFormatter<HijriCalendar> f2 = 
     ChronoFormatter.ofPattern(
      "F. EEEE 'im' MMMM", 
      PatternType.CLDR, 
      Locale.GERMAN, 
      HijriCalendar.family()); 
    assertThat(f2.format(hijri), is("1. Sonntag im Ramadan")); 

サイドノート:私はbuilder-とパターンベースのアプローチの両方を表示する新しいFrenchRepublicanCalendar)それは10日間使用しているため(またv4.28/3.33で導入されたが)WEEKDAY_IN_MONTHをサポートしていません - 週とb)いくつかの日(サンスクリット)は、任意の月の一部ではありません。

関連する問題