首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在time4j中按月获得一周一周的时间

在time4j中按月获得一周一周的时间
EN

Stack Overflow用户
提问于 2017-05-23 15:24:52
回答 1查看 262关注 0票数 4

我正在尝试将hijri日历设置为例如,hijri月的第三个星期三。

经过一些搜索,我找到了以下代码:

代码语言:javascript
复制
 PlainDate date = PlainDate.of(2017, 3, 1); // first of march 2017
 System.out.println(date.with(WEEKDAY_IN_MONTH.setToThird(WEDNESDAY)));    

但正如你所看到的,这将日历设置为公历的第三个星期三。

有没有办法为time4j库中的其他日历设置月的第三个星期三?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-09-08 05:20:08

很抱歉迟了回答,虽然这个解决方案已经在2017年7月底发布了v4.28/3.33。(我现在忙于通宵发布v4.29/3.34 (日出/日落-计算))。

每个基于月份的日历(包括HijriCalendar)都支持自Time4A版本v3.33-2017b以来的工作日_IN_MONTH-元素。它是特定于年表的,因为每个日历的月份定义是不同的。示例:

代码语言:javascript
复制
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“的格式模式。我展示了构建器和基于模式的方法:

代码语言:javascript
复制
    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)不是任何月份的一部分。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44139021

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档