gpt4 book ai didi

java - 在 time4j 的回历中获取一个月中的一周

转载 作者:太空宇宙 更新时间:2023-11-03 11:00:44 25 4
gpt4 key购买 nike

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

 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 个星期三?

最佳答案

虽然该解决方案自 2017 年 7 月底发布 v4.28/3.33 以来已经可用,但很抱歉回答晚了。 (我现在正忙于 overnext release v4.29/3.34 (sunrise/sunset-calculations))。

从 Time4A 版本 v3.33-2017b 开始,每个基于月的日历(包括 HijriCalendar)都支持 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"));

旁注:新的 FrenchRepublicanCalendar(也在 v4.28/3.33 中引入)不支持 WEEKDAY_IN_MONTH,因为 a) 它使用 10 天周和 b) 某些天(sansculottides ) 不是任何月份的一部分。

关于java - 在 time4j 的回历中获取一个月中的一周,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44139021/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com