識別子で使用しようとしてNSCalendar
います。NSIslamicCalendar
しかし、その日の結果は良くありません。彼女は私のコードです:
NSCalendar *calandar = [[NSCalendar alloc]initWithCalendarIdentifier:NSIslamicCalendar];
NSDateComponents *components = [calandar components:(NSDayCalendarUnit | NSMonthCalendarUnit | NSYearCalendarUnit) fromDate:[NSDate date]];
NSInteger theDay = [components day];
NSInteger theMonth = [components month];
NSInteger theYear = [components year];
[components setDay:theDay];
[components setMonth:theMonth];
[components setYear:theYear];
NSDate *thisDate = [calandar dateFromComponents:components];
NSLog(@"year=%i month=%i day=%i",theYear,theMonth,theDay);
NSLog(@"thisdate = %@", [thisDate description]);
NSString *strDate = [NSString stringWithFormat:@"%i-%i-%i",theYear,theMonth,theDay];
NSDateFormatter *formatter = [[NSDateFormatter alloc]init];
[formatter setDateFormat:@"yyyy-MM-dd"];
NSDate *datee = [formatter dateFromString:strDate];
NSLog(@"datee = %@", [datee description]);
ログ:
year=1434 month=2 day=28 ----> all good (it's islamic calandar)
thisdate = 2013-01-09 23:00:00 +0000 ----> not good (we are in 2013-01-10 not 09).
datee = 1434-02-27 23:19:16 +0000 ----> not good (we are in 1434-02-28 not 27)
ご覧のとおり、最初の日付は他の 2 つではなく正しく、時間も正しくありません (コンパイルすると約 14:20 です)。最後の 2 つのログ (23:00:00 と 23:19: 16)。
このコードは私の viewDidload: 関数にあり、前後に他のコードは実行されていません。
また、月の日数を取得したい場合は、もう 1 日取得します。
NSCalendar *c = [[NSCalendar alloc]initWithCalendarIdentifier:NSIslamicCalendar];
NSRange dayRange = [c rangeOfUnit:NSDayCalendarUnit inUnit:NSMonthCalendarUnit forDate:date];
NSLog(@"dayRange.length = %i",dayRange.length);
ログ:
dayRange.length = 30 -----> but this islamic month have 29 day not 30.
何が問題で、どうすれば修正できますか? ありがとうございました。
編集:
1 つの違いはNSGregorianCalendar
、日数のカウントが正しいことです。を使用してログに記録するNSGregorianCalendar
year=2013 month=1 day=10 -----> all good
thisdate = 2013-01-09 23:00:00 +0000 -----> not good
datee = 2013-01-09 23:00:00 +0000 -----> not good
dayRange.length = 31 ------------------------> all good