У меня есть следующие две строки даты: (1) 24/04/2013 и (2) 19/03/2013 Я пытаюсь преобразовать эти даты в исламские (Um Al Qura) даты, я использую этот блок кода для этого:
NSDateFormatter *df = [[NSDateFormatter alloc] init];
df.dateFormat = @"dd/MM/yyyy";
df.calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
NSDate *dateInGrogrian = [df dateFromString:@"24/04/2013"];
NSDateFormatter *df2 = [[NSDateFormatter alloc] init];
NSCalendar * cal = [[NSCalendar alloc] initWithCalendarIdentifier:NSIslamicCalendar];
[df2 setCalendar:cal];
[df2 setDateFormat:@"dd/MM/yyyy"];
NSLog(@"Converted date to Islamic = %@",[df2 stringFromDate:dateInGrogrian]);
если строка ввода была 24/04/2013, отображается NSLog
:
Converted date to Islamic = 14/06/1434
, который является правильным (согласно официальному исламскому календарю, который используется во всех исламских странах). Но если входная строка была 19/03/2013, отображается NSLog
:
Converted date to Islamic = 08/05/1434
, который является неправильным (согласно исламскому календарю, правильная дата должна быть 07/05/1434, которая на 1 день позади).
- Примечания для рассмотрения, прежде чем вы предлагаете ответ:
(1) Я попытался использовать идентификатор календаря NSIslamicCivilCalendar
вместо NSIslamicCalendar
, но безрезультатно: одна из преобразованных дат была правильной, а другая была неправильной (1 день сзади).
(2) Я попытался использовать часовой пояс GMT следующим образом: [df2 setTimeZone : [NSTimeZone timeZoneWithName:@"GMT"]];
, это привело к правильной конвертированной дате для дня (2), но неверно для дня (1) (1 день позади).
(3) Я пробовал комбинации решений: NSIslamicCivilCalendar
с/без часовой пояс GMT, NSIslamicCalendar
с/без часовой пояс, но также безрезультатно...
может ли кто-нибудь предоставить блок кода, который удовлетворяет обеим датам? поэтому я гарантирую, что любая предоставленная gregorian строка даты правильно преобразована в исламскую строку даты.
Большое вам спасибо.