iOS で 1 週間以内に予定されている誕生日を見つけようとしています。Facebook から誕生日データを取得し、年の部分をトリミングしました (ユーザーのプライバシー設定によっては一部のユーザーが利用できない可能性があるため)。したがって、誕生日データはNSString
日付形式です。@"MM/dd"
NSDateFormatter *dateFormatter = [[NSDateFormatter dateFormatterWithFormat:@"MM/dd"] retain];
NSDate *today = [NSDate date];
NSDateComponents *todayComponents = [dateFormatter.calendar components:NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit
fromDate:today];
todayComponents.hour = 13;
todayComponents.minute = 0;
todayComponents.second = 0;
today = [dateFormatter.calendar dateFromComponents:todayComponents];
[facebookFriends enumerateObjectsUsingBlock:^(NSDictionary *friend,
NSUInteger idx,
BOOL *stop) {
NSDate *birthday = [dateFormatter dateFromString:[friend objectForKey:@"birthday"]];
NSDateComponents *birthdayComponents = [dateFormatter.calendar components:NSMonthCalendarUnit | NSDayCalendarUnit
fromDate:birthday];
birthdayComponents.year = todayComponents.year;
birthdayComponents.hour = todayComponents.hour;
birthdayComponents.minute = todayComponents.minute;
birthdayComponents.second = todayComponents.second;
birthday = [dateFormatter.calendar dateFromComponents:birthdayComponents];
NSDateComponents *difference = [dateFormatter.calendar components:NSDayCalendarUnit
fromDate:today
toDate:birthday
options:0];
if (difference.day >= 0 &&
difference.day < 7) { // 7 days in a week
[birthdaysToShow[difference.day] addObject:friend];
}
}];
[dateFormatter release];
dateFormatterWithFormat:
のカテゴリはどこですかNSDateFormatter
:
+ (NSDateFormatter *)dateFormatterWithFormat:(NSString *)formatString
{
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
NSCalendar *calendar = [[[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar] autorelease];
dateFormatter.calendar = calendar;
dateFormatter.dateFormat = formatString;
dateFormatter.timeZone = [NSTimeZone timeZoneWithAbbreviation:@"GMT"];
return [dateFormatter autorelease];
}
ここで 2 つの質問:
1- このコードにはバグがあります。新年まであと 1 週間未満の場合、誕生日の年を現在の年に設定しているため、新年の誕生日を表示できません。difference.day
新年の誕生日の場合は 0 よりはるかに少なくなります。どうすれば修正できますか?
2- 上記のスニペットからわかるように、私は多くのダンスを行っています。最初に で今日の日付と時刻を取得し[NSDate date]
、次にそれをコンポーネントにリッピングしてNSDate
、現在ではなく正午の時刻でに戻します。時間。私がこれを行っている理由は[NSDate date]
、時刻が 23:00:00 である日付を返し、誕生日の時間が 00:00:00 (1 時間後、誕生日が明日であることを意味する) の場合、代わりにdifference.day
等しいためです。0
希望の1
。上記のスニペットで行ったことは、これを行う適切な方法ですか? 一見とても単純に見えるものに対してあまりにも多くの作業を行っているのではないかと思います.スライスtoday
しbirthday
てコンポーネントに戻し、それらをコンポーネントに戻す必要がないように、この配置をどのように修正しNSDate
ますか?