带有NSIslamicCalendar的NSDateFormatter无法正常工作

时间:2014-02-17 10:22:46

标签: ios objective-c date nsdateformatter nscalendar

我正在使用NSDateFormatter使用NSIslamicCalendar将Greogorian日期转换为Hijri日期,并使用setCalendar方法作为格式化程序日历,问题是结果Hijri String总是超过一天实际日期,例如,如果我们使用下面的代码将今天的格雷格日期转换为Hijri,那么输出将是18 Rabi' || 1435,这是错误的,因为今天是17 Rabi' || 1435,我看到很多关于这些问题的帖子,如{{} 3}}和these我在这些帖子中尝试了所有可能的解决方案,但没有意思!这是hijriDateFormatter属性的getter:

-(NSDateFormatter*)hijriDateFormatter{
if (!_hijriDateFormatter) {
    _hijriDateFormatter=[[NSDateFormatter alloc] init];
}

[_hijriDateFormatter setTimeZone:[NSTimeZone systemTimeZone]]; // i trie aslo to set TimeZone as localTimeZone
 _hijriDateFormatter.locale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"];
[_hijriDateFormatter setDateFormat:@"dd MMMM, yyyy"];
[_hijriDateFormatter setCalendar:self.hijriCalendar];
return _hijriDateFormatter;

}

也是属性hijriCalendar的获取者:

-(NSCalendar*)hijriCalendar{
if (!_hijriCalendar) {
    _hijriCalendar=[[NSCalendar alloc] initWithCalendarIdentifier:NSIslamicCalendar];
}
return _hijriCalendar;
}

这里我将转换后的HijriDate作为字符串:

NSString *convertedHijriDate=[self.hijriDateFormatter stringFromDate:GregorianDate];

鉴于GregorianDate是今天的日期,其值为:2014-02-17 09:48:47 +0000请在这些问题上帮助我,提前谢谢

1 个答案:

答案 0 :(得分:0)

伊斯兰日历很难。在公认的使用中存在明显不同的数学公式,这导致不同的结果。此外,正确的日历基于对月球的实际观测,根据您的位置给出不同的结果,例如天气(在给定的一天是否可以看到新月取决于天气;在晴朗的一天,新的月亮可能几乎看不到,而在阴天则无法看到。总之,可以有不同的数字都可以“正确”。

我建议你尽可能多地阅读这个主题,然后找出你想要展示的答案。