我正在尝试将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个星期三?
答案 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)不是任何一个月的一部分。