我有以下两个日期字符串:(1) 24/04/2013和(2) 19/03/2013 --我正试图将这些日期转换为伊斯兰日期(Um ),我正在使用这个代码块这样做:
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字符串都被正确地转换为伊斯兰日期字符串。
非常感谢。
发布于 2013-06-18 06:22:25
// 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]);
https://stackoverflow.com/questions/16194820
复制相似问题