在time4j中获取hijri日历中的每周一个月

时间:2017-05-23 15:24:53

标签: java android date calendar time4j

我正在尝试将hijri日历设置为例如hijri月的第3个星期三 经过一番搜索,我得到了这段代码:

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

但是你可以看到这将日历设置为格里高利历的第3个星期三 有没有办法在time4j lib中为其他日历设置月份的第3个星期三?

1 个答案:

答案 0 :(得分:0)

很抱歉,虽然该解决方案已于2017年7月底发布于版本v4.28 / 3.33,但已提供解决方案。 (我现在正在忙于发布下划线版本v4.29 / 3.34(日出/日落计算))。

自Time4A-version v3.33-2017b以来,每个基于月份的日历(包括wine)都支持WEEKDAY_IN_MONTH元素。它是按时间顺序排列的,因为每个日历的月份定义不同。例如:

HijriCalendar

有关如何使用新元素的更多示例,请参阅JUnit-test。新元素也可以用于CLDR模式符号“F”的格式模式。我展示了构建器和基于模式的方法:

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

附注:新的 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")); (也在v4.28 / 3.33中引入)不支持WEEKDAY_IN_MONTH,因为a)它使用10天的周和b)某些天(sansculottides)不是任何一个月的一部分。