加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – 在time4j中获取hijri日历中的每周一周

发布时间:2020-12-15 02:19:26 所属栏目:Java 来源:网络整理
导读:我正试图将hijri日历设置为例如hijri月的第3个星期三. 经过一些搜索,我达到了这个代码: PlainDate date = PlainDate.of(2017,3,1); // first of march 2017 System.out.println(date.with(WEEKDAY_IN_MONTH.setToThird(WEDNESDAY))); 但正如你所看到的,这将
我正试图将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个星期三?

解决方法

对于迟到的答案很抱歉,尽管该解决方案已于2017年7月底发布于版本v4.28 / 3.33. (我现在正忙于下文版本v4.29 / 3.34(日出/日落计算)).

自Time4A-version 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)不是任何月份的一部分.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读