ios – 将gregorian日期字符串转换为伊斯兰日期会提供正确和不正确的结果

前端之家收集整理的这篇文章主要介绍了ios – 将gregorian日期字符串转换为伊斯兰日期会提供正确和不正确的结果前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有以下两个日期字符串:(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显示

转换为伊斯兰= 14/06/1434这是正确的(根据所有伊斯兰国家使用的the formal Islamic calendar).但如果输入字符串是19/03/2013,NSLog显示

转换日期为伊斯兰= 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有/没有GMT时区,但也没有用…

任何人都可以提供满足这两个日期的代码块?所以我确保任何提供的gregorian日期字符串被正确地转换成伊斯兰日期字符串.

非常感谢.

@R_301_323@

在打印出过去四年的所有日期之后,似乎苹果公司用数学计算伊斯兰教日历的方式,因为Moxy指出,实际的日历不是基于科学的日子而是基于月球近似的.

这个公式是,所有奇数月份都有30天,所有偶数月份有29天,在任何一年的最后一个月增加了一个额外的日子,其中年份30是以下之一:2,5,7,10,13,16,18,21,24,26或29.

结果是平均月长29.53056天,与农历29.53059天相当接近.

这个公式已经在计算机的其他地方使用,因为它是计算日期的唯一方法,而不使用历史记录中每年的查找表.因此,除非您自己编写查找表,否则这将与您可以获得的所有日期向前和向后一样准确.

原文链接:https://www.f2er.com/iOS/337533.html

猜你在找的iOS相关文章