如何在一个月内获得所有星期日

时间:2013-09-14 08:03:55

标签: iphone ios objective-c ipad nsdate

我有一个概念在特定月份获得所有星期天

我有一个数组,其中包含月份和年份

array=(Septmeber 2013, October 2013,January 2013,July 2013,May 2013)

现在通过保持这个数组我希望在阵列月份中获得所有星期日(星期日日期),我的阵列是动态的,所以根据月份,我需要所有星期天

EG: 如果数组是2013年9月的

mynewarray =(2013年9月1日,2013年9月8日,2013年9月15日,2013年9月15日,2013年9月22日,2013年9月29日)

我想要一个像这种格式的新数组

请帮助

提前致谢....

1 个答案:

答案 0 :(得分:4)

好的,假设您还希望输出为“2013年9月1日”格式的字符串数组......

// Input array
NSArray *array = @[@"September 2013", @"February 2013", @"October 2013", @"January 2013", @"July 2013", @"May 2013"];

// Output array
NSMutableArray *output = [NSMutableArray array];

// Setup a date formatter to parse the input strings
NSDateFormatter *inputFormatter = [[NSDateFormatter alloc] init];
inputFormatter.dateFormat = @"MMMM yyyy";

// Setup a date formatter to format the output strings
NSDateFormatter *outputFormatter = [[NSDateFormatter alloc] init];
outputFormatter.dateFormat = @"MMMM d yyyy";

// Gregorian calendar for use in the loop
NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];

// Iterate each entry in the array
for (NSString *monthYear in array)
{
    @autoreleasepool
    {
        // Parse the entry to get the date at the start of each month and it's components
        NSDate *startOfMonth = [inputFormatter dateFromString:monthYear];
        NSDateComponents *dateComponents = [calendar components:NSMonthCalendarUnit | NSYearCalendarUnit fromDate:startOfMonth];

        // Iterate the days in this month
        NSRange dayRange = [calendar rangeOfUnit:NSDayCalendarUnit inUnit:NSMonthCalendarUnit forDate:startOfMonth];
        for (ushort day = dayRange.location; day <= dayRange.length; ++day)
        {
            @autoreleasepool
            {
                // Assign the current day to the components
                dateComponents.day = day;

                // Create a date for the current day
                NSDate *date = [calendar dateFromComponents:dateComponents];

                // Sunday is day 1 in the Gregorian calendar (https://developer.apple.com/library/ios/documentation/Cocoa/Reference/Foundation/Classes/NSDateComponents_Class/Reference/Reference.html#//apple_ref/occ/instm/NSDateComponents/weekday)
                NSDateComponents *components = [calendar components:NSWeekdayCalendarUnit fromDate:date];
                if (components.weekday == 1)
                {
                    [output addObject:[outputFormatter stringFromDate:date]];
                }
            }
        }
    }
}

NSLog(@"%@", output);

// Release inputFormatter, outputFormatter, and calendar if not using ARC

可能有更好的方法可以做到这一点,我对此并不满意,但它确实起到了作用。