首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将公历日期字符串转换为伊斯兰日期将得到正确和不正确的结果。

将公历日期字符串转换为伊斯兰日期将得到正确和不正确的结果。
EN

Stack Overflow用户
提问于 2013-04-24 14:35:11
回答 2查看 7.2K关注 0票数 17

我有以下两个日期字符串:(1) 24/04/2013和(2) 19/03/2013 --我正试图将这些日期转换为伊斯兰日期(Um ),我正在使用这个代码块这样做:

代码语言:javascript
运行
复制
    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显示:

Converted date to Islamic = 08/05/1434,这是不正确的(根据伊斯兰日历,正确的日期必须是07/05/1434,即落后1天)。

-在你提出答案之前要考虑的注释:

(1 ) I尝试使用日历标识符NSIslamicCivilCalendar而不是NSIslamicCalendar,但没有结果:一个转换日期是正确的,另一个是错误的(落后1天)。

(2) I尝试使用GMT时区如下:[df2 setTimeZone : [NSTimeZone timeZoneWithName:@"GMT"]];,这产生了一个正确的日期转换日期(2),但不正确的第(1)天(1天后)。

(3) I尝试了多种解决方案的组合:带/不带格林尼治时区的NSIslamicCivilCalendar,有/不含格林尼治时区的NSIslamicCalendar,但也没有效果。

有人能提供满足这两个日期的代码块吗?因此,我确保任何提供的gregorian字符串都被正确地转换为伊斯兰日期字符串。

非常感谢。

EN

Stack Overflow用户

发布于 2013-06-18 06:22:25

代码语言:javascript
运行
复制
// Create a Gregorian Calendar
NSCalendar *gregorianCalendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];

// Set up components of a Gregorian date
NSDateComponents *gregorianComponents = [[NSCalendar currentCalendar] components:NSDayCalendarUnit | NSMonthCalendarUnit | NSYearCalendarUnit fromDate:[NSDate date]];

NSLog(@"[In Gregorian calendar ->] Day: %ld, Month: %ld, Year:%ld",
      (long)[gregorianComponents day],
      (long)[gregorianComponents month],
      (long)[gregorianComponents year]);


gregorianComponents.day = [gregorianComponents day];
gregorianComponents.month = [gregorianComponents month];
gregorianComponents.year = [gregorianComponents year];

// Create the date
NSDate *date = [gregorianCalendar dateFromComponents:gregorianComponents];



// Then create an Islamic calendar
NSCalendar *hijriCalendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSIslamicCivilCalendar];

// And grab those date components for the same date
NSDateComponents *hijriComponents = [hijriCalendar components:(NSDayCalendarUnit |
                                                               NSMonthCalendarUnit |
                                                               NSYearCalendarUnit)
                                                     fromDate:date];


NSLog(@"[In Hijri calendar ->] Day: %ld, Month: %ld, Year:%ld",
      (long)[hijriComponents day],
      (long)[hijriComponents month],
      (long)[hijriComponents year]);
票数 8
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16194820

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档