2017-05-23 4 views
4

예를 들어 hijri 월의 3 번째 수요일에 hijri 달력을 설정하려고합니다.time4j에서 hijri 달력으로 매주 가져 오기

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

Time4J의 이슈 트래커에서 새로운 [issue] (https://github.com/MenoData/Time4J/issues/653)를 열었습니다. 그 동안이 누락 된 새 기능에 대한 유일한 해결 방법은 주어진 월의 모든 요일을 반복하고 검색된 요일이 얼마나 자주 발생했는지 계산하는 것입니다. –

+0

이제 v3.33 버전의 새로운 기능을 구현했습니다 (아직 출시되지는 않았습니다). –

+0

큰 도움이 lib와 내 친구. 새로운 릴리스를 기대합니다. – max

답변

0

해결책은 릴리스 v4.28/3.33의 2017 년 7 월 말부터 이미 사용할 수 있지만 늦게 답변드립니다. (이제 나는 overnext release v4.29/3.34 (일출/일몰 계산)로 바쁘다.

매월 기반 달력 (HijriCalendar 포함)은 Time4A 버전 v3.33-2017b 이후 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")); 

사이드 노트 : 나는 builder-과 패턴 기반의 접근 방식을 모두 보여 새로운 FrenchRepublicanCalendar A)는 10 일 사용하기 때문에 (또한 v4.28/3.33에서 소개는) WEEKDAY_IN_MONTH에 대한 지원이 없습니다 - 주와 b) 며칠 (sansculottides)은 어떤 달에도 속하지 않습니다.