gpt4 book ai didi

ios - 将公历日期字符串转换为伊斯兰日期会给出正确和错误的结果

转载 作者:IT王子 更新时间:2023-10-29 08:14:57 24 4
gpt4 key购买 nike

我有以下两个日期字符串:(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 这是正确的(根据在所有伊斯兰国家使用的 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 时区,但也无济于事......

谁能提供满足这两个日期的代码块?所以我确保将任何提供的公历日期字符串正确转换为伊斯兰日期字符串。

非常感谢。

最佳答案

在打印出过去 4 年的所有日期后,Apple 似乎使用了某种程度上被接受的公式来数学计算伊斯兰历,因为正如 Moxy 指出的那样,实际的日历不是基于科学日期,而是基于阴历.

这个公式是所有奇数月份有 30 天,所有偶数月份有 29 天,在年份 mod 30 为以下之一的任何年份的最后一个月增加一天:2、5 、7、10、13、16、18、21、24、26 或 29。

结果是平均月份长度为 29.53056 天,非常接近阴历月的 29.53059 天。

此公式已在计算机的其他地方使用,因为它是计算日期的唯一方法,无需使用历史上每一年的查找表。因此,除非您自己编写查找表,否则对于所有前后的日期,这将尽可能准确。

关于ios - 将公历日期字符串转换为伊斯兰日期会给出正确和错误的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16194820/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com