2012-11-05 3 views
0

저는 이번 주에 월요일 - 목요일 날짜를 얻으려고합니다. 하지만 어떤 이유로이 코드를 사용하면 이번 주 날짜와 이전 주일을 혼합하여 사용할 수 있습니다.잘못된 날짜 받기

이 작업을 수행하는 이상한 방법 일 수 있습니다. 그러나 코드에 무엇이 잘못되었는지 알 수 없습니다.

사람이 날짜를 얻기의 더 좋은 방법을 가지고있는 경우 PLS는 힌트를 줄 다음 :

내 코드 :

NSDate *today = [NSDate date]; 


//Change first weekday of the week 

NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar]; 
gregorian.firstWeekday = 2; 

NSCalendar *gregorian1 = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar]; 
gregorian1.firstWeekday = 3; 

NSCalendar *gregorian2 = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar]; 
gregorian2.firstWeekday = 4; 

NSCalendar *gregorian3 = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar]; 
gregorian3.firstWeekday = 5; 




NSDateComponents *components = [gregorian components:NSWeekCalendarUnit fromDate:today]; 

NSUInteger weekOfYear = [components weekOfYear]; 

//Give the date of the first week day 

NSDate *mondaysdate = nil; 
[gregorian rangeOfUnit:NSWeekCalendarUnit startDate:&mondaysdate interval:NULL forDate:today]; 
NSDate *tuesdaysdate = nil; 
[gregorian1 rangeOfUnit:NSWeekCalendarUnit startDate:&tuesdaysdate interval:NULL forDate:today]; 

NSDate *wednesdaysdate = nil; 
[gregorian2 rangeOfUnit:NSWeekCalendarUnit startDate:&wednesdaysdate interval:NULL forDate:today]; 
NSDate *thursdaysdate = nil; 
[gregorian3 rangeOfUnit:NSWeekCalendarUnit startDate:&thursdaysdate interval:NULL forDate:today]; 


//Making the dates into string 

NSDateFormatter *formatter2 = [[NSDateFormatter alloc]init]; 
formatter2.dateFormat = @"yyyy/MM/dd"; 

NSString *monday = [formatter2 stringFromDate:mondaysdate]; 
NSString *tuesday = [formatter2 stringFromDate:tuesdaysdate]; 
NSString *wednesday = [formatter2 stringFromDate:wednesdaysdate]; 
NSString *thursday = [formatter2 stringFromDate:thursdaysdate]; 

답변

0
NSCalendar *gregorianCalendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar]; 
NSDateComponents *comps = [gregorianCalendar components:(NSYearCalendarUnits | NSMonthCalendarUnits | NSWeekCalendarUnits | NSWeekdayCalendarUnits) fromDate:[NSDate date]]; 

comps.weekday = 2; 
NSDate *monday = [gregorianCalendar dateFromComponents:comps]; 

comps.weekday = 3; 
NSDate *tuesday = [gregorianCalendar dateFromComponents:comps]; 

comps.weekday = 4; 
NSDate *wednesday = [gregorianCalendar dateFromComponents:comps]; 

comps.weekday = 5; 
NSDate *thursday = [gregorianCalendar dateFromComponents:comps]; 
+0

감사합니다. 이렇게하는 것이 훨씬 더 좋은 방법입니다. :)! –

0

당신이 사용할 수있는 숫자로 요일을 얻기 위해 다음과 같은 , 이것은 psuedocode이므로 컴파일되지 않을 수도 있지만 좋은 시작을 제공해야합니다. 숫자에 따라 다른 날짜를 생성 한 다음 나중에 다시 문자열로 가져올 수 있습니다.

NSDateFormatter *df = [[NSDateFormatter alloc] init]; 
[df setDateFormat:@"c"]; //<- gives you day of week as an integer, 1 for monday, 2 for tuesday, etc 

NSDate *today = [NSDate date]; 
NSInteger dayOfWeek = [[df stringFromDate:today] integerValue]; 

그런 다음 원래 오늘 변수에 요일 오프셋을 추가하여 다른 NSDates를 만듭니다.

그런 다음 서식을 다시 지정하십시오.

[df setDateFormat:@"yyyy/mm/dd"]; 
[df stringFromDate:today]; //<-- do this for all the other dates too 

[df release]; //<- if you do this method often, consider having the date formatter as global 

다음은 형식을 지정하기위한 참고 자료입니다. http://unicode.org/reports/tr35/tr35-6.html#Date_Format_Patterns