我正在尝试将hijri日历设置为例如,hijri月的第三个星期三。
经过一些搜索,我找到了以下代码:
PlainDate date = PlainDate.of(2017, 3, 1); // first of march 2017
System.out.println(date.with(WEEKDAY_IN_MONTH.setToThird(WEDNESDAY))); 但正如你所看到的,这将日历设置为公历的第三个星期三。
有没有办法为time4j库中的其他日历设置月的第三个星期三?
发布于 2017-09-08 05:20:08
很抱歉迟了回答,虽然这个解决方案已经在2017年7月底发布了v4.28/3.33。(我现在忙于通宵发布v4.29/3.34 (日出/日落-计算))。
每个基于月份的日历(包括HijriCalendar)都支持自Time4A版本v3.33-2017b以来的工作日_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-测试中可以找到更多如何使用新元素的示例。新元素也可以用于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"));附带注意:新的FrenchRepublicanCalendar (也是在v4.28/3.33中引入的)不支持WEEKDAY_IN_MONTH,因为它使用10天的一周,b)有些日子( sansculottides)不是任何月份的一部分。
https://stackoverflow.com/questions/44139021
复制相似问题