2016-09-21 1 views
2

나는 Hijri Date가 필요한 앱을 개발 중이며 여기서 게시 된 내용은 converting gregorian to hijri date입니다.그레고리 안 날짜에서 Hijri 날짜로 변환 할 때 잘못됨 (Android Studio)

그것은 나를 위해 작동하지만 예를 들어 그레고리오 어가 20/9/2016 일 때 잘못된 날짜를주었습니다. 그것은 Hijri에서 17/12/1437이되었고 그것은 19/12/1437이어야합니다.

어디에 문제가 있습니까?

답변

0

변환 예에 관해서는 사우디 - 아라비아의 공식 캘린더 인 Hijri-calendar의 Umalqura 변형을 찾는 것으로 보입니다.

게시 한 SO 링크가 Joda-Time을 가리 킵니다. 이 라이브러리는 umalqura를 지원하지 않지만 히스 리 캘린더의 4 가지 알고리즘 변형 (근사값으로 만 사용) 만 지원합니다. 4 가지 변형본을 모두 테스트했습니다. 아무 것도 당신을위한 것이 아닙니다.

Chronology iso = ISOChronology.getInstanceUTC(); 
Chronology hijri = 
    IslamicChronology.getInstance(DateTimeZone.UTC, IslamicChronology.LEAP_YEAR_INDIAN); 
LocalDate todayIso = new LocalDate(2016, 9, 20, iso); 
LocalDate todayHijri = new LocalDate(todayIso.toDateTimeAtStartOfDay(), hijri); 
System.out.println("joda=" + todayHijri); 
// LEAP_YEAR_15_BASED => 1437-12-16 
// LEAP_YEAR_16_BASED => 1437-12-16 
// LEAP_YEAR_HABASH_AL_HASIB => 1437-12-17 
// LEAP_YEAR_INDIAN => 1437-12-17 

당신은 다음과 같은 솔루션을 사용할 수 있습니다 자바-8 -platform에서 작동하는 경우. 당신이 안드로이드에있는 다음 백 포트의 ThreetenABP를 사용하려고하면 그 구현은 자바-8에서 벗어나 있기 때문에, 그 실패합니다

HijrahDate hd = HijrahDate.from(LocalDate.of(2016, 9, 20)); 
System.out.println("java.time=" + hd); // Hijrah-umalqura AH 1437-12-19 

다른 변종 또는 일의 변수 시작 같은 더 달력 기능을 원하는 경우 (이슬람 일몰에서 시작합니다!) 또는 Android에서 작업하는 경우 Time4J/A 라이브러리를 사용할 수 있습니다. 마지막 예제는 정오 시간에 유효한 변환입니다

System.out.println(
    PlainDate.of(2016, 9, 20) 
    .transform(HijriCalendar.class, HijriCalendar.VARIANT_UMALQURA)); 
// AH-1437-12-19[islamic-umalqura] 

하는 것으로 (안드로이드 또는 Time4A)에 HijriCalendar of Time4J은 당신이 원하는 것을 얻을 수 있습니다. 하루의 시작으로 저녁을 사용하는 경우 javadoc에 문의하십시오.

2016년 9월 7일에서 업데이트 : 안드로이드에 대한 매우 다른 API를

다른 가능한 umalqura 솔루션 (

+0

고마워, 저에게 도움이되었습니다. –

+1

또한 Umalqura 캘린더를위한 훌륭한 라이브러리를 발견했습니다. [link] (https://github.com/msarhan/ummalqura-calendar) –