2012-07-12 2 views
1

주어진 달의 주 숫자를 계산하고 싶습니다. 예 : 2012 년 7 월의 달은 주 번호가 26, 27, 28, 29, 30 및 31이어야합니다. 나는이 스 니펫을 작성했지만 앞뒤의 주 번호를 얻을 수있는 실행 가능한 방법을 찾고 있습니다. 어떤 생각이야.주어진 달의 주 숫자를 계산하십시오.

감사합니다. 대럴.

//Get current week number 
NSCalendar *cal = [NSCalendar currentCalendar]; 
NSDateComponents *components = [cal components:NSWeekCalendarUnit fromDate:[NSDate date]]; 
NSInteger week = [components week]; 
NSLog(@"Week nummer: %d", (int)week); 

//Get week numbers in month 
[components weekOfYear]; 
NSRange weeksInMonth = [cal rangeOfUnit:NSWeekCalendarUnit 
          inUnit:NSMonthCalendarUnit 
         forDate:[cal dateFromComponents:components]]; 
NSLog(@"Weken in maand: %lu", weeksInMonth.length); 
+0

텍스트 정보가있는 파일이 있습니다. 저는 날짜 목록을 가져 와서 올해의 고유 한 달을 계산할 수 있기를 원합니다. 나는 자연에서 이것을하고있다. 하지만 코볼을 사용할 수는 있습니다. –

답변

4

는 기능 :

- (NSArray *)weeksOfMonth:(int)month inYear:(int)year 
{ 
    NSCalendar *calendar = [NSCalendar currentCalendar]; 

    NSDateComponents *components = [[[NSDateComponents alloc] init] autorelease]; 
    [components setMonth:month]; 
    [components setYear:year]; 

    NSRange range = [calendar rangeOfUnit:NSDayCalendarUnit 
            inUnit:NSMonthCalendarUnit 
            forDate:[calendar dateFromComponents:components]]; 

    calendar = [NSCalendar currentCalendar]; 
    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc]init]; 
    [dateFormatter setDateFormat:@"yyyy-MM-dd"]; 
    NSMutableSet *weeks = [[NSMutableSet alloc] init ]; 

    for(int i = 0; i < range.length; i++) 
    {  
     NSString *temp = [NSString stringWithFormat:@"%4d-%2d-%2d",year,month,range.location+i]; 
     NSDate *date = [dateFormatter dateFromString:temp ]; 
     int week = [[calendar components: NSWeekOfYearCalendarUnit fromDate:date] weekOfYear]; 
     [weeks addObject:[NSNumber numberWithInt:week]]; 
    } 

    NSSortDescriptor *descriptor = [[NSSortDescriptor alloc] initWithKey:@"" ascending:YES]; 
    NSArray *descriptors = [[NSArray alloc] initWithObjects:descriptor, nil]; 
    return [weeks sortedArrayUsingDescriptors:descriptors]; 
} 

사용법 :

NSArray *weeks = [self weeksOfMonth:7 inYear:2012]; 
NSLog(@"%@",weeks); 

출력 : 대한

{(
    27, 
    28, 
    29, 
    30, 
    31 
)} 
2
int year = 2012; 
int month = 7; 

NSCalendar *cal = [NSCalendar currentCalendar]; 
NSDate *date = nil; 
NSDateComponents *components = [[[NSDateComponents alloc] init] autorelease]; 

[components setYear:year]; 
[components setMonth:month]; 
date = [cal dateFromComponents:components]; 
NSLog(@"starting week # %d = %@", [[cal components:NSWeekCalendarUnit fromDate:date] week], date); 

[components setMonth:month + 1]; 
[components setDay:-1]; 
date = [cal dateFromComponents:components]; 
NSLog(@"ending week # %d = %@", [[cal components:NSWeekCalendarUnit fromDate:date] week], date); 
1

솔루션 앤 sugested 작품 출력은 출력과 같이 정렬되지 않습니다. 나는 배열로 변환하는 데 필요한 및 종류의 같은 :

// Sorting everything. 
NSSortDescriptor *sorter = [[NSSortDescriptor alloc] initWithKey:@"self" ascending:YES]; 
NSArray *weeks = [[self weeksOfMonth:7 inYear:2012]allObjects]; 
NSArray *sorters = [[NSArray alloc] initWithObjects:sorter, nil]; 
NSArray *sortedArray = [weeks sortedArrayUsingDescriptors:sorters]; 

for (NSNumber *element in sortedArray) 
{ 
    NSLog(@"%i",element.intValue); 
} 

이가의 논리적 인 단계가이 작업을 수행 할 수있는 더 섹시한 방법이?

+0

'sortedArrayUsingDescriptors :'를 사용하여 정렬 된 배열을 반환하는 함수가 실제로 정확합니다. – Anne