-4

指定された 2 つの日付の間の土曜日の日付のみを取得しようとしています。

これどうやってするの?

4

2 に答える 2

3

残念ながら、2 つの日付間をループする直接的な方法はなく、NSDate オブジェクトから直接曜日を取得することはできません。したがって、それを機能させるには、さらに数行を追加する必要があります。ここで重要なのは、NSDateComponents を使用することです。この例では、グレゴリオ暦を使用しています。デフォルトでは、Apple のドキュメントによると、平日は 1 日目 (文字通り 1) である日曜日から始まります。日曜日がゼロであるとは考えないでください (混乱するのはよくあることです)。

土曜日は週の 7 日目なので、整数 7 であると言えます。コードは次のとおりです。これから、クラス/カテゴリに追加するメソッドを簡単に作成し、確認したい曜日をパラメーターとして渡すことができます。

NSInteger count = 0;
NSInteger saturday = 7;

// Set the incremental interval for each interaction.
NSDateComponents *oneDay = [[NSDateComponents alloc] init];
[oneDay setDay:1];

// Using a Gregorian calendar.
NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];

NSDate *currentDate = fromDate;

// Iterate from fromDate until toDate
while ([currentDate compare:toDate] == NSOrderedAscending) {

    NSDateComponents *dateComponents = [calendar components:NSWeekdayCalendarUnit fromDate:currentDate];

    if (dateComponents.weekday == saturday) {
        count++;
    }

    // "Increment" currentDate by one day.
    currentDate = [calendar dateByAddingComponents:oneDay
                                            toDate:currentDate
                                           options:0];
}

NSLog(@"count = %d", count);
于 2013-08-19T05:44:46.297 に答える